码迷,mamicode.com
首页 > 其他好文 > 详细

欧拉函数

时间:2014-08-03 17:43:45      阅读:248      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   color   os   io   for   art   

The Euler function http://acm.hdu.edu.cn/showproblem.php?pid=2824

筛法

bubuko.com,布布扣
 1 #include<cstdio>
 2 #include<cstring>
 3 #define mt(a,b) memset(a,b,sizeof(a))
 4 typedef __int64 LL;
 5 const int M=3000010;
 6 int phi[M];//小于i并且与i互素的个数
 7 int pri[M],pricnt;
 8 void sieve_phi(){//筛法求欧拉函数phi
 9     pricnt=0;
10     mt(phi,0);
11     phi[1]=1;
12     for(int i=2;i<M;i++){
13         if(!phi[i]){
14             pri[pricnt++]=i;
15             phi[i]=i-1;
16         }
17         for(int j=0;pri[j]*i<M;j++){
18             if(i%pri[j]){
19                 phi[i*pri[j]]=phi[i]*(pri[j]-1);
20             }
21             else{
22                 phi[i*pri[j]]=phi[i]*pri[j];
23                 break;
24             }
25         }
26     }
27 }
28 int main() {
29     sieve_phi();
30     int x,y;
31     while(~scanf("%d%d",&x,&y)){
32         LL ans=0;
33         for(int i=x;i<=y;i++){
34             ans+=phi[i];
35         }
36         printf("%I64d\n",ans);
37     }
38     return 0;
39 }
View Code

 Farey Sequence http://poj.org/problem?id=2478

bubuko.com,布布扣
 1 #include<cstdio>
 2 #include<cstring>
 3 #define mt(a,b) memset(a,b,sizeof(a))
 4 typedef __int64 LL;
 5 const int M=1000010;
 6 int phi[M];//小于i并且与i互素的个数
 7 int pri[M],pricnt;
 8 void sieve_phi(){//筛法求欧拉函数phi
 9     pricnt=0;
10     mt(phi,0);
11     phi[1]=1;
12     for(int i=2;i<M;i++){
13         if(!phi[i]){
14             pri[pricnt++]=i;
15             phi[i]=i-1;
16         }
17         for(int j=0;pri[j]*i<M;j++){
18             if(i%pri[j]){
19                 phi[i*pri[j]]=phi[i]*(pri[j]-1);
20             }
21             else{
22                 phi[i*pri[j]]=phi[i]*pri[j];
23                 break;
24             }
25         }
26     }
27 }
28 LL sum[M];
29 int main() {
30     sieve_phi();
31     sum[1]=0;
32     for(int i=2;i<M;i++){
33         sum[i]=sum[i-1]+phi[i];
34     }
35     int n;
36     while(~scanf("%d",&n),n){
37         printf("%I64d\n",sum[n]);
38     }
39     return 0;
40 }
View Code

 

 

 

end

 

欧拉函数,布布扣,bubuko.com

欧拉函数

标签:style   blog   http   color   os   io   for   art   

原文地址:http://www.cnblogs.com/gaolzzxin/p/3888493.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!