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

欧拉函数

时间:2017-08-04 16:45:05      阅读:175      评论:0      收藏:0      [点我收藏+]

标签:max   循环   欧拉   color   print   模板   stdio.h   prim   prime   

模板

 1 #include<stdio.h>
 2 const int MAXN=3000010;
 3 bool  vis[MAXN];
 4 int prime[MAXN/10];
 5 long long euler[MAXN];
 6 int main()
 7 {
 8     int i,j,temp,top;
 9     int  n;
10     top=0;
11     euler[1]=1;
12     for (i=2; i<MAXN; i++)
13     {
14         if (!vis[i])
15         {
16             prime[top++]=i;
17             euler[i]=i-1;///质数p的欧拉函数=p-1
18         }
19         for(j=0;prime[j]*i<MAXN;j++)
20         {
21             vis[prime[j]*i]=1;
22             if(i%prime[j]==0)///遇到最小素因数退出循环
23             {
24                 ///因为i去除过prime[j]的倍数,所以不需要再次去除
25                 euler[i*prime[j]]=euler[i]*prime[j];
26                  break;
27             }
28             else
29             {
30                 ///因为i不含有prime[j],需要去除prime[j]的倍数
31                 ///因为i与prime[j]互质
32                 ///=> euler[i*prime[j]]=euler[i]*euler[prime[j]];
33                 euler[i*prime[j]]=euler[i]*(prime[j]-1);
34             }
35         }
36     }
37     for(i=2;i<MAXN;i++)
38     {
39         euler[i]+=euler[i-1];///对欧拉函数求前缀和
40     }
41     int a,b;
42     while(scanf("%d%d",&a,&b)!=EOF)
43     {
44         printf("%I64d\n", euler[b]- euler[a-1]);
45     }
46     return 0;
47 }

 

欧拉函数

标签:max   循环   欧拉   color   print   模板   stdio.h   prim   prime   

原文地址:http://www.cnblogs.com/yZiii/p/7285872.html

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