标签:质因数 有一个 aik height 欧拉函数 tle color 一个 dsa
我们都知道欧拉筛又称线性筛,能在O(n)的时间复杂度内筛出n以内的所有质数,而我们只要在线性筛的代码上改良一下就能求出n以内所有数的欧拉函数了。
筛质数时,设外层在枚举i,内层枚举到prime[j],这时有两种情况:
附上代码:
1 int phi[]; 2 int notprime[],prime[]; 3 int cnt; 4 void getphi(int n){ 5 notprime[0]=notprime[1]=1; 6 phi[1]=0,phi[2]=1; 7 for(int i=2;i<=n;++i){ 8 if(!primenot[i]){ 9 phi[i]=i-1;//质数的欧拉函数值为该质数减一 10 prime[++cnt]=i; 11 } 12 for(int j=1;j<=cnt&&prime[j]*i<=n;++j){ 13 notprime[prime[j]*i]=1; 14 if(i%prime[j]) phi[prime[j]*i]=phi[prime[j]]*phi[i];//互质 15 else {//不互质 16 phi[prime[j]*i]=prime[j]*phi[i]; 17 break; 18 } 19 } 20 } 21 }
标签:质因数 有一个 aik height 欧拉函数 tle color 一个 dsa
原文地址:https://www.cnblogs.com/Asika3912333/p/11313000.html