码迷,mamicode.com
首页 > 其他好文 > 详细

NYOJ 998

时间:2017-01-03 22:04:42      阅读:223      评论:0      收藏:0      [点我收藏+]

标签:分解   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 998

标签:分解   nyoj   计算   介绍   log   溢出   函数定义   数值   res   

原文地址:http://www.cnblogs.com/liugl7/p/6246442.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!