欧拉函数

欧拉函数是指从1到n之内,与n互质的数的个数

欧拉函数推论:一个数的所有质因子之和是euler(n)*n/2;

求出一个数的欧拉函数的复杂度是sqrt(n);

可以线性打出欧拉函数表

//直接求解欧拉函数  
int euler(int n){ //返回euler(n)   
     int res=n,a=n;  
     for(int i=2;i*i<=a;i++){  
         if(a%i==0){  
             res=res/i*(i-1);//先进行除法是为了防止中间数据的溢出   
             while(a%i==0) a/=i;  
         }  
     }  
     if(a>1) res=res/a*(a-1);  
     return res;  
}  
  
//筛选法打欧拉函数表   
#define Max 1000001  
int euler[Max];  
void Init(){   
     euler[1]=1;  
     for(int i=2;i<Max;i++)  
       euler[i]=i;  
     for(int i=2;i<Max;i++)  
        if(euler[i]==i)  
           for(int j=i;j<Max;j+=i)  
              euler[j]=euler[j]/i*(i-1);//先进行除法是为了防止中间数据的溢出   
} 

 

posted @ 2017-12-09 19:20  啦啦啦天啦噜  阅读(212)  评论(0编辑  收藏  举报