首页 > 其他 > 详细

欧拉函数 欧拉筛法

时间:2019-03-29 00:37:15      阅读:188      评论:0      收藏:0      [点我收藏+]

欧拉函数是小于x的整数中与x互质的数的个数,一般用φ(x)表示。特殊的,φ(1)=1。

若p是质数,显然有φ(p)=p-1。

计算公式:φ(N)=N*(1-1/P1)*(1-1/P2)*...*(1-1/Pn)

 

单个欧拉函数可以在sqrt(n)计算出来

int euler(int n){
    int m=sqrt(n)+1;
    int ans=n;
    for(int i=2;i<=m;i++)
        if(n%i==0){
            ans=ans/i*(i-1);
            while(n%i==0)n/=i;
        }
    if(n>1)ans=ans/n*(n-1);//如果n是质数ans=n-1,否则ans不会变 
    return ans;
}

 

欧拉筛法同时求欧拉函数

void euler(int n)
{
    phi[1]=1;
    for (int i=2;i<=n;i++)
    {
        if (isprime[i]==0)
        {
            prime[++num]=i;
            phi[i]=i-1;
        }
        for (int j=1;j<=num&&prime[j]*i<=n;j++){
            isprime[i*prime[j]]=1;
            if (i%prime[j]==0)
            {
                phi[i*prime[j]]=phi[i]*prime[j];
                                break;            
                        }
            else phi[i*prime[j]]=phi[i]*phi[prime[j]];
        }
    }
}
                

 

欧拉函数 欧拉筛法

原文:https://www.cnblogs.com/xutianshu/p/10618670.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!