欧拉函数
 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 } 
View Code

相关文章:

  • 2022-02-12
  • 2021-06-19
  • 2022-12-23
  • 2022-01-25
  • 2021-10-13
  • 2021-11-01
  • 2022-02-07
  • 2022-12-23
猜你喜欢
  • 2021-05-30
  • 2021-10-08
  • 2022-12-23
  • 2021-12-26
  • 2022-12-23
  • 2022-12-23
  • 2021-10-30
相关资源
相似解决方案