• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
L&King
有何不可!
   首页    新随笔    联系   管理    订阅  订阅

欧拉函数模板

 1 int e(int n)
 2 {
 3     int cnt=n;
 4     int i;
 5     for(i=2;i<=n;i++)
 6         if(n%i==0)
 7         {
 8             cnt -=cnt/i;     
 9             while(n%i==0)
10                 n/=i;
11         }
12     return cnt;
13 }
View Code

E(x)为欧拉函数。P为N的一个质因子。

若(N%P==0 && (N/P)%P==0) 则有:E(N)=E(N/P)*P;
 
若(N%P==0 && (N/P)%P!=0) 则有:E(N)=E(N/P)*(P-1);
欧拉函数打表:
const int N=1e6+11;
int phi[N];
void init(){
    for(int i=2;i<N;i++){
        if(!phi[i]){
            for(int j=i;j<N;j+=i){
                if(!phi[j])    phi[j]=j;
                phi[j]=phi[j]/i*(i-1);
            }
        }
    }
} 

 

posted @ 2016-04-16 11:28  L&King  阅读(164)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3