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

欧拉函数

时间:2018-05-09 20:56:53      阅读:209      评论:0      收藏:0      [点我收藏+]

标签:ini   init   while   ++   ret   code   color   class   ...   

欧拉函数φ(N)表示N 的欧拉函数:即小于N且与N互质数 的个数

1.对于素数p, φ(p)=p-1,对于对两个素数p,q φ(pq)=pq-1

2.对于一个正整数N的素数幂分解N=P1^q1*P2^q2*...*Pn^qn.

   φ(N)=N*(1-1/P1)*(1-1/P2)*...*(1-1/Pn).

3.除了N=2,φ(N)都是偶数.

4.设N为正整数,∑φ(d)=N (d|N).

 

第一种求法的时间复杂度是 O( N* sqrt(N)) .

 1 //直接求解欧拉函数  
 2 int euler(int n){ //返回euler(n)   
 3      int res=n,a=n;  
 4      for(int i=2;i*i<=a;i++){  
 5          if(a%i==0){  
 6              //res=res/i*(i-1);//先进行除法是为了防止中间数据的溢出   
 7              res -= res / i;
 8              while(a%i==0) a/=i;  
 9          }  
10      }  
11      if(a>1)  //res=res/a*(a-1);  
12           res -= res /i;
13      return res;  
14 }      

还有种方法是在求素数的时候,顺便把欧拉函数的值给求了

 1 void Init(){     
 2      euler[1]=1;    
 3      for(int i=2;i<Max;i++)    
 4        euler[i]=i;    
 5      for(int i=2;i<Max;i++)    
 6         if(euler[i]==i)    
 7            for(int j=i;j<Max;j+=i)    
 8               //euler[j]=euler[j]/i*(i-1);//先进行除法是为了防止中间数据的溢出     
 9               euler[j] -= euler[j] / i;
10 }    

 

欧拉函数

标签:ini   init   while   ++   ret   code   color   class   ...   

原文地址:https://www.cnblogs.com/jaydenouyang/p/9016227.html

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