poj 2407
欧拉函数。
代码:
#include<iostream> #include<fstream> #include<cmath> using namespace std; int a[40001]; long long n,m; void read(){ // ifstream cin("in.txt"); int i,j,k; long long ans; for(i=4;i<=40000;i+=2) a[i]=1; for(i=3;i<=40000;i+=2) if(a[i]==0) { for(j=2*i;j<=40000;j+=i) a[j]=1; } while(cin>>n){ if(n==0) return ; if(n==1) { cout<<0<<endl; continue; } ans=1;m=n; for(i=2;i<=n&&i*i<=m;i++) if(a[i]==0&&n%i==0) { j=0; while(n%i==0) { n/=i; j++; } ans*=pow(1.*i,j-1)*(i-1); } if(n>1) ans*=n-1; cout<<ans<<endl; } } int main(){ read(); return 0; }