标签:质因数 函数 51Nod res 1136 int include 互质
1.通式: 其中p1,p2....pn为x的所有质因数,x是不为0的整数。(每种质因数只有一个,比如12=2*2*3那么φ(12)=φ(4*3)=φ(2^2*3^1)=(2^2-2^1)*(3^1-3^0)=4) 2.其中φ(1)=1(和1互质的数(小于等于1)就是1本身)。 3.若n是质数p的k次幂, ,因为除了p的倍数外,其他数都跟n互质。 4.特殊性质:当n为质数时, , 。 5.欧拉函数是积性函数,但不是完全积性函数,若m,n互质,。 6.n的所有质因数之和等于φ(n)*n/21 #include<stdio.h> 2 #include<algorithm> 3 #include<iostream> 4 #include<string.h> 5 using namespace std; 6 int euler(int x){ 7 int res=x,a=x; 8 for(int i=2;i*i<=a;i++){ 9 if(a%i==0){//质因数 10 res=res-res/i;//N*(1-1/p) 11 while(a%i==0)a/=i;//每种质因数只有一个。 12 } 13 } 14 if(a>1)res=res-res/a; 15 return res; 16 } 17 int main(){ 18 int n; 19 scanf("%d",&n); 20 printf("%d",euler(n)); 21 return 0; 22 }
线性求欧拉函数模板:
缺点:范围不能过大。
1 #include<stdio.h> 2 #include<algorithm> 3 #include<iostream> 4 #include<string.h> 5 using namespace std; 6 const int maxn=1e6+7; 7 int phi[maxn]; 8 void getphi(int n){ 9 int minDiv; 10 for(int i=1;i<n;i++)phi[i]=i; 11 for(int i=2;i*i<n;i++){ 12 if(phi[i]==i){ 13 for(int j=i*i;j<n;j+=i){ 14 phi[j]=i; 15 } 16 } 17 } 18 phi[1]=1; 19 for(int i=2;i<n;i++){ 20 minDiv=phi[i]; 21 if((i/phi[i])%phi[i]==0) 22 phi[i]=phi[i/phi[i]]*phi[i]; 23 else 24 phi[i]=phi[i/phi[i]]*(phi[i]-1); 25 } 26 } 27 int main(){ 28 int n; 29 getphi(1000); 30 scanf("%d",&n); 31 printf("%d",phi[n]); 32 return 0; 33 }
标签:质因数,函数,51Nod,res,1136,int,include,互质 来源: https://www.cnblogs.com/precious-LZY/p/10365088.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。