【数论】欧拉函数与欧拉定理

· · 个人记录

本篇博文将对欧拉函数与(扩展)欧拉定理的定义,性质与求法进行讲解。

Part 1. 定义

Part 2. 性质

欧拉函数是积性函数,即 \varphi(nm)=\varphi(n)\times\varphi(m)

这里放出几个我会证明的性质:

证明:显然 n 仅包含 p 这一个质因子,那么 [1,n] 范围内不与 n 互质的数的个数就是 \dfrac{n}{p}=p^{k-1},则 \varphi(n)=p^k-p^{k-1},得证。

证明:由上文可得 \varphi(p^k)=p^k-p^{k-1},即 \varphi(p^k)=p^{k-1}\times(p-1)

因为欧拉函数是积性函数,所以有

\begin{aligned}\varphi(n)&=\prod\limits_{i=1}^s\varphi(p_i^{k_i})\\&=\prod\limits_{i=1}^s (p_i-1)\times p_i^{k_i-1}\\&=\prod\limits_{i=1}^s p_i^{k_i}\times(1-\dfrac{1}{p_i})\\&=n\times \prod\limits_{i=1}^s (1-\dfrac{1}{p_i})\\&=n\times \prod\limits_{i=1}^s \dfrac{p_i-1}{p_i}\end{aligned}

得证。

Part 3. 求解

代码如下:

int getphi(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;
}

方法:因为线性筛可以筛出每个数的最小质因子,设当前的合数为 n,其最小质因子为 p,令 n'=\dfrac{n}{p},此时要进行分类讨论。

n' \bmod p=0,则 n' 包含了 n 的所有因子,有 \varphi(n)=n\times \prod\limits_{i=1}^s \dfrac{p_i-1}{p_i}=p\times n'\times \prod\limits_{i=1}^s \dfrac{p_i-1}{p_i}=p\times \varphi(n')

n'\bmod p\neq 0,则有 \varphi(n)=\varphi(p)\times\varphi(n')=(p-1)\times\varphi(n')

若要求 [1,n] 范围内每个数的欧拉函数,则时间复杂度为 O(n)

代码:

void getphi(int x){
    is[1]=1;phi[1]=1;
    for(int i=2;i<=x;i++){
        if(!is[i])phi[i]=i-1,p[++cnt]=i;
        for(int j=1;j<=cnt&&i*p[j]<=x;j++){
            is[i*p[j]]=1;
            if(i%p[j]==0){
                phi[i*p[j]]=p[j]*phi[i];
                break;
            }
            else phi[i*p[j]]=(p[j]-1)*phi[i];
        }
    }
}

Part 4. (扩展)欧拉定理

a^b\equiv\begin{cases}a^{b\bmod\varphi(p)},&\gcd(a,p)=1\\a^b,&\gcd(a,p)\neq1,b<\varphi(p)\\a^{b\bmod\varphi(p)+\varphi(p)},&\gcd(a,p)\neq 1,b\ge\varphi(p)\end{cases}\pmod{p}

证明详见 OI wiki:Link。

板子 Link。