标签:ati 技术分享 nbsp aik return 奇数 int tps 表达
欧拉函数:<=n中与n互质数的个数
1)单值:按题意暴力,
int euler(int n){ int res=n; for(int i=2;i<=n;i++){ if(n%i==0){ res=res/i*(i-1); while(n%i==0){ n=n/i; } } } if(n>1) res=res/n*(n-1);//防止最终还有剩下因子 return res; }
2)筛法:先用euler[i]数组内值代表初始状态(是否已被操作),a b种的表达方式不同而已
// a int Euler(int n){ for(int i=1;i<=n;i++) euler[i]=i; for(int i=2;i*i<=n;i++) if(!euler[i]) for(int j=i;j<=i;j+=i) euler[j]=euler[j]/i*(i-1); } // b int Euler(int n){ euler[1]=1; for(int i=2;i*i<=n;i++) if(!euler[i]) for(int j=i;j<=n;j+){ if(!euler[j]) euler[j]=j; euler[j]=euler[j]/i*(i-1); } }
性质:
标签:ati 技术分享 nbsp aik return 奇数 int tps 表达
原文地址:https://www.cnblogs.com/asdic/p/9507672.html