欧拉函数与欧拉降幂

欧拉函数
对于正整数\(n\),欧拉函数是小于或等于\(n\)的正整数中与\(n\)互质的数的数目。
\(\varphi(1)=1\),除了1之外,所有正整数与它本身都不互质
对于质数\(p\)\(\varphi(p)=p-1\)
\(\sum_{d|n}\varphi(d)=n\),其中\(d\)\(n\)的因数
欧拉函数是积性函数,若\(m,n\)互质,则有\(\varphi(mn)=\varphi(m)\varphi(n)\)

通式:\(\varphi(x)=x\prod_{i=1}^n(1-\frac{1}{p_i})\) (\(p_1,p_2,\cdots,p_n\)\(x\)的所有质因数)

模板一:求单个正整数的欧拉函数
    时间复杂度\(O(\sqrt x)\)
    模板题:hdu1286 找新朋友

int phi(int x){
    int ans=x;
    for(int i=2;i*i<=x;i++){
        if(x%i==0){
            ans=ans/i*(i-1);
            while(x%i==0){
                x/=i;
            }
        }
    }
    if(x>1) ans=ans/x*(x-1);
    return ans;
}

模板二:求区间内所有数的欧拉函数
    时间复杂度\(O(n)\)
    模板题:hdu2824 The Euler function

const int maxn=500010;
int phi[maxn];

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

欧拉降幂
欧拉降幂公式:
\(a^k\equiv a^{k\% \varphi(m)+\varphi(m)}(mod\ m)\),其中\(\varphi(m)\)是欧拉函数,\(a,k,m\)都是整数并且\(k\geq \varphi(m)\)

posted @ 2020-07-10 18:46  fxq1304  阅读(78)  评论(0编辑  收藏  举报