欧拉函数
1 /* 2 欧拉函数: 3 小于或等于n的正整数中,与n互质的数的数目 4 */ 5 #include<stdio.h> 6 #define N 3000005 7 __int64 ans[N]; 8 void init() //打表法 9 { 10 for(int i=1;i<N;i++) ans[i]=i; 11 for(int i=2;i<N;i+=2) ans[i]/=2; 12 for(int i=3;i<N;i+=2) 13 if(ans[i]==i){ 14 for(int j=i;j<N;j+=i) ans[j]=ans[j]/i*(i-1); 15 } 16 } 17 int euler(int n) //直接求法 18 { 19 int ret=1; 20 for(int i=2;i*i<=n;i++){ 21 if(n%i==0){ 22 n/=i,ret*=i-1; 23 while(n%i==0){ 24 n/=i,ret*=i; 25 } 26 } 27 } 28 if(n>1) ret*=n-1; 29 return ret; 30 } 31 int main(void) 32 { 33 int n; 34 while(scanf("%d",&n)!=EOF) 35 { 36 printf("%d\n",euler(n)); 37 } 38 return 0; 39 }