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

模板:欧拉函数

时间:2017-10-14 16:51:42      阅读:148      评论:0      收藏:0      [点我收藏+]

标签:while   code   col   +=   oid   turn   div   int   模板   

 1 //直接求解欧拉函数
 2 int Euler(int 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             while(a%i==0) a/=i;
 8         }
 9     }
10     if(a>1) res=res/a*(a-1);
11     return res;
12 } 
13 
14 //筛法求解欧拉函数
15 void Euler(){
16     phi[1]=1;
17     for(int i=2;i<N;i++) phi[i]=i;
18     for(int i=2;i<N;i++){
19         if(phi[i]==i){
20             for(int j=i;j<N;j+=i) phi[j]=phi[j]/i*(i-1);
21         }
22     }
23 }

 

模板:欧拉函数

标签:while   code   col   +=   oid   turn   div   int   模板   

原文地址:http://www.cnblogs.com/Leonard-/p/7667417.html

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