欧拉函数学习笔记

欧拉函数几个性质

性质一φ(n)=x(1-1/p1)(1-1/p2)(1-1/p3)(1-1/p4)…(1-1/pn)

ll eulur(ll x){//根据定义求
    ll ans=x;
    for(ll i=2;i*i<=x;i++){
        if(x%i==0){
            while(x%i==0)   x/=i;
            ans=ans*(i-1)/i;
        }
    }
    if(x>1) ans=ans*(x-1)/x;
    return ans;
}


性质二:所有小于n与n互质的数字的和sum=φ(n)/2*n其中互质的数都是成对出现,并且和为n

性质三:当n是奇数时候,φ(2*n)=φ(n);

性质四:如果i%p==0&&(i/p)%p==0 那么有φ(i)=φ(i/p)*p;else φ(i)=φ(i/p)*(p-1)

因此可以通过nlogn求出最小质因数,再O(n)预处理phi

int mindiv[N],phi[N];
void init(){
    for(int i=1;i<N;++i)    mindiv[i]=i;
    for(int i=2;i*i<N;i++){
        if(mindiv[i]==i){
            for(int j=i*i;j<N;j+=i){
                mindiv[j]=i;
            }
        }
    }
    phi[1]=1;
    for(int i=2;i<N;i++){
        phi[i]=phi[i/mindiv[i]];
        if((i/mindiv[i])%mindiv[i]==0)  phi[i]=phi[i]*mindiv[i];
        else phi[i]=phi[i]*(mindiv[i]-1);
    }
}


一个很好的blog:链接讲了杜教筛,暂时不求甚解



猜你喜欢

转载自blog.csdn.net/Haipai1998/article/details/80287079