歐拉函數版子

歐拉函數版子;
//直接求解歐拉函數  
LL euler(LL n)
{ //返回euler(n)   
       LL res=n,a=n;  
       for(LL 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;  
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章