逆元、欧拉定理

同余

\(a\)%\(m=b\)%\(m表示为a\equiv b(mod m)\)

逆元

\(a,b \in Z_m,ab=1,则称b是a的逆元,计作a^{-1}\)

Exgcd求法

\(ab=km+1 \rightarrow ab-mk=1 (用exgcd的形式ax+by=1可求)\)
限制要求\((a,m)=1,a和m互质\)
除了Ecgcd求法,还有另一种求逆元

欧拉函数

\(\phi(n)为正整数n与1,2,···,n-1,n互质的个数\)
\(n=p^{a_1}_1p^{a_2}_2····p^{a_k}_k\)
\(\phi(n)=(p_1-1)p_1^{a_1-1} \times (p_2-1)p_2^{a_2-1}···\times (p_k-1)p_k^{a_k-1}\)

证明

首先\(\phi(n)=n-\frac{n}{p_1}-\frac{n}{p_2}-····-\frac{n}{p_k}\)
不难发现其中有像\(p_1\cdot p_2\)被除了2遍
所以\(\phi(n)=n-\frac{n}{p_1}-\frac{n}{p_2}-····-\frac{n}{p_k}+\frac{n}{p_1\cdotp_2}+\frac{n}{p_1\cdotp_3}+···+\frac{n}{p_{k-1}\cdot p_k}\)
但像\(p_1 \cdot p_2 \cdot p_3\)先被减了3遍,又加了3遍,等于没减
\(\phi(n)=n-\frac{n}{p_1}-\frac{n}{p_2}-····-\frac{n}{p_k}+\frac{n}{p_1\cdotp_2}+\frac{n}{p_1\cdotp_3}+···+\frac{n}{p_{k-1}\cdot p_k}-\frac{n}{p_1 \cdot p_2 \cdot p_3}-···- \frac{n}{p_{k-2} \cdot p_{k-1} \cdot p_{k}}\)
以此类推
\(\phi(n)=n-\frac{n}{p_1}-\frac{n}{p_2}-····-\frac{n}{p_k}+\frac{n}{p_1\cdotp_2}+\frac{n}{p_1\cdotp_3}+···+\frac{n}{p_{k-1}\cdot p_k}-\frac{n}{p_1 \cdot p_2 \cdot p_3}-···- \frac{n}{p_{k-2} \cdot p_{k-1} \cdot p_{k}}+···+(-1)^l \cdot \frac{n}{p_1 \cdot ····p_l}+···(-1)^k \cdot \frac{n}{p_1···p_k}\)
其实就是容斥原理
\(\phi(n)=\sum_{i=0}^n(-1)^i\cdot\sum_{1 \leq j_1\leq j_2···\leq j_i\leq n}|\bigcap_{k=1}^{i}A_{j_k}|\)\((A_i为能被p_i整除的集合)\)
\(\qquad=\sum_{i=0}^n(-1)^i\cdot\sum_{1 \leq j_1\leq j_2···\leq j_i\leq n}\lfloor\frac{n}{p_{j_1}p_{j_2}···p_{j_i}}\rfloor\)
整理得到
\(\phi(n)=n(1-\frac{1}{p_1})(1-\frac{1}{p_2})····(1-\frac{1}{p_k})\)($$)
因为\(n=p^{a_1}_1p^{a_2}_2····p^{a_k}_k\),则\(\phi(n)=(p_1-1)p_1^{a_1-1} \times (p_2-1)p_2^{a_2-1}···\times (p_k-1)p_k^{a_k-1}\)

具体实现

求单个\(\phi(n)\)

ll get_phi(ll n){
    ll phi=1;
    for(int i=2;i<=n/i;i++){
        if(n%i==0){
            phi*=(i-1);
            n/=i;
            while(n%i==0){n/=i;phi*=i;}
        }
    }
    if(n>1)phi*=(n-1);//n有一个大于√n的质数
    return phi;	
}

\(\phi(1)····\phi(n)\)

int prime[maxn],tot,is[maxn],phi[maxn];
void get_phi(ll n){
    phi[1]=1;
    for(int i=2;i<=n;i++){
        if(!is[i])prime[++tot]=i,phi[i]=i-1;
        for(int j=1;j<=tot && prime[j]*i<=n;j++){
            is[i*prime[j]]=1;
            if(i%prime[j]==0){//说明已经有了一个prime[i]
                phi[i*prime[j]]=phi[i]*prime[j];
                break;
            }
            phi[i*prime[j]]=phi[i]*(prime[j]-1);
        }
    }
    return ;
}

欧拉定理

如果\((a,m)=1,那么a^{\phi(m)}\equiv 1(mod m)\)

证明:

把不超过𝑚且与𝑚互质的正整数拿出来构成集合{\({𝑥_1,𝑥_2,…,𝑥_{𝜑(m)}}\)}
设𝑎与𝑚互质且\(x_i\)也与m互质,则\((ax_i,m)=(m,ax_i\)%\(m)=1\)
集合{\({𝑎𝑥_1,𝑎𝑥_2,…,𝑎𝑥_{𝜑(m)}}\)}在模𝑚意义下与前一集合相等(都是与m互质的集合)(均为\(模𝑚意义下\)的缩系)
将集合内所有原数相乘,得到
\(𝑎𝑥_1 \times 𝑎𝑥_2 \times…\times 𝑎𝑥_{𝜑(𝑚)}\equiv 𝑎^{𝜑(𝑚)} \prod_{i=1}^{\phi(m)} x_i \equiv \prod_{i=1}^{\phi(m)} x_i\)(mod m)
因为\(x_i\)与m互质,则都有逆元
对上个式子的右边2个式子每个\(x_i\)都乘上逆元
\(𝑎^{𝜑(𝑚)}\equiv 1\) (mod m)
证毕

费马小定理

设m为质数,则任何不是m的倍数的a,那么\(a^{m-1} \equiv 1\)(mod m)

根据上述2个定理就可以求得逆元
设m为正整数,\(a\in Z_m, (a,m)=1\),则逆元\(a^{-1}=a^{\phi(m)-1}\)
设m为质数,\(a\in Z_m, a\in(0,m)\),则逆元\(a^{-1}=a^{m-2}\)

O(n) 求1到n的对于质数p(>n)的逆元
\(\lfloor \frac{p}{i} \rfloor i + p\)%\(i=p\)
\(\lfloor \frac{p}{i} \rfloor i + p\)%\(i \equiv 0\)(mod p)
\(\lfloor \frac{p}{i} \rfloor i \equiv - p\)%\(i\)(mod p),两边同乘\((-p\)%\(i) 和i\)的逆元
\(-(p\)%\(i)^{-1} \cdot \lfloor \frac{p}{i} \rfloor i \equiv i^{-1}\)(mod p)

    inv[1]=1;
    for(int i=2;i<=n;i++){
        inv[i]=(ll)((((ll)(-p/i)*inv[p%i])%p+p)%p);
    }

扩展欧拉定理

\(a^c \equiv a^{c \% \phi(m)+\phi(m)} (mod \:m), ifc \geq \phi(m)\)
证明参考:yifusuyi’s blog
具体应用

posted @ 2021-10-09 12:58  I_N_V  阅读(136)  评论(0编辑  收藏  举报