[SGU 102] Coprimes [欧拉函数]
2014-07-11 12:49
302 查看
给定一个数,求不大于他的和他互质的数的个数,互质的定义是最大公约数为1
欧拉函数:若n的不同的质因子为p1, p2, ... , pr,则小于等于n的和n互质的数的个数φ(n)=n*(p1-1)/p1*(p2-1)/p2*...*(pr-1)/pr
如12=2*2*3,则φ(12)=12*1/2*2/3=4
欧拉函数:若n的不同的质因子为p1, p2, ... , pr,则小于等于n的和n互质的数的个数φ(n)=n*(p1-1)/p1*(p2-1)/p2*...*(pr-1)/pr
如12=2*2*3,则φ(12)=12*1/2*2/3=4
#include <cstring> #include <cstdio> const int PS=10100; //size int mpf[PS]; //for mpf[i], 0 means i is prime, otherwise equals to the min prime factor of i int prime[PS]; //prime int pn=0; //number of prime void getPrime() { memset(mpf,0,sizeof(mpf)); for (int i=2;i<PS;i++) { if (mpf[i]==0) prime[pn++]=i; for (int j=0;j<pn&&i*prime[j]<PS&&(prime[j]<=mpf[i]||mpf[i]==0);j++) mpf[i*prime[j]]=prime[j]; } } int cal(int n) { int lp=1,ans=n; while (mpf !=0) { if (mpf !=lp) { lp=mpf ; ans=ans*(lp-1)/lp; } n=n/mpf ; } if (n!=lp) ans=ans*(n-1)/n; return ans; } int main() { int n; getPrime(); scanf("%d",&n); printf("%d\n",cal(n)); return 0; }
相关文章推荐
- SGU 102 Coprimes(欧拉函数)
- SGU 102 Coprimes
- SGU102 Coprimes
- SGU 102(欧拉函数)
- sgu 102 欧拉函数(poj 2407)
- Coprimes - SGU 102(求互质数,水)
- sgu102:Coprimes
- sgu 102 Coprimes 互质
- SGU 102(Coprimes)
- SGU102——Coprimes (又见欧几里得)
- sgu 102 Coprimes 解题报告及测试数据
- SGU 102 - Coprimes(简单)
- SGU 102 —— 欧拉函数
- sgu 102模拟欧拉函数
- sgu-102 Coprimes 暴力GCD直接求解
- sgu 102模拟欧拉函数
- [SGU102 Coprimes]
- SGU102 - Coprimes
- sgu102-欧拉函数
- SGU102 Coprimes