标签:分解 nyoj 计算 介绍 log 溢出 函数定义 数值 res
这道题是欧拉函数的使用,这里简要介绍下欧拉函数。
欧拉函数定义为:对于正整数n,欧拉函数是指不超过n且与n互质的正整数的个数。
欧拉函数的性质:1.设n = p1a1p2a2p3a3p4a4...pkak为正整数n的素数幂分解,那么φ(n) = n·(1-1/p1)·(1-1/p2)·(1-1/p3)···(1-1/pk)
2.如果n是质数,则φ(n) = n-1; 反之,如果p是一个正整数且满足φ(p)=p-1,那么p是素数。
3.设n是一个大于2 的正整数,则φ(n)是偶数
4.当n为奇数时,有φ(2n)=φ(n)
5.设m和n是互质的正整数,那么φ(mn)=φ(m)φ(n)
可以根据性质1,写出计算欧拉函数值的程序:
1 //直接求解欧拉函数 2 int euler(int n){ //返回euler(n) 3 int res=n; 4 for(int i=2;i*i<=n;i++){ 5 if(n%i==0){ 6 res=res/i*(i-1);//先进行除法是为了防止中间数据的溢出 7 while(n%i==0) n/=i; 8 } 9 } 10 if(n>1) res=res/n*(n-1); 11 return res; 12 }
标签:分解 nyoj 计算 介绍 log 溢出 函数定义 数值 res
原文地址:http://www.cnblogs.com/liugl7/p/6246442.html