[总结] 欧拉函数

· · 个人记录

一些概念

一些定理

暴力求得欧拉函数值

原理:一边分解一边按照下面的原理求解

int make_phi(int x){
    int phi=x;
    int t=(int)sqrt(x+0.5);
    for(int i=2;i<=t;i++){
        if(x%i==0){
            phi=phi-phi/i;
            while(x%i==0){
                x/=i;
            }
        }
    }
    if(x>1){
        phi=phi-phi/x;
    }
    return phi;
}

筛法构建欧拉函数表

原理:

inline void make_phi(int n){
    for(re int i=2;i<=n;i++)if(!phi[i])
        for(re int j=i;j<=n;j+=i){
            if(phi[j]==0)phi[j]=j;
            phi[j]=phi[j]/i*(i-1);
        }
}

应用

解法:ans=\varphi(n) * n/2