逆元、欧拉定理
同余
\(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
具体应用