若ax≡1(modm),则称x为a在模m意义下的逆元,记作a−1
ps:
当(a,m)!=1时,不存在逆元
证明:
我们需要寻找一个整数M满足M≡a−1(modm)
当有ax≡1(modm)
此时有x满足x≡a1(modm)
所以x为a在mod m意义下的逆元
拓欧求逆元
根据线性同余方程可知
求解x相当于求解
ax+my=1的一组整数解
可知逆元的前提(a,m)=1,否则无解
拓展欧几里得可求其中的一组解
ps:
对于拓展欧拉求解的x,当a,m不互质时,也可以求解出一个数,但是这是ax+my=gcd(a,m)的一组解,其x为a/gcd(a,m)的逆元
线性递推求逆元
已知1−1≡1(modp)
设p=k×i+r,r<i,1<i<p
k=p/i,r=p%i
将上式放到(modp)的意义下会得到
k×i+r≡0(modp)
同乘i−1,r−1
i−1≡−k×r−1(modp)
i−1≡−p/i×(p%i)−1(modp)
所以
i−1=−p/i×(p%i)−1modp
我们需要保证逆元为正整数,在右式中加上p,并不影响答案
i−1=p−p/i×(p%i)−1modp
inv[1]=1;
for(int i=2;i<=n;++i){
inv[i]=p-p/i*inv[p%i]%p;
}
ps:
在线性求解逆元中,p必须是质数
当两个数n,p不互质时并不存在逆元,而逆元n是从1~n的所有状态中转移过来的,所以p必须是质数
在线性求解逆元中,i必须小于p
当i>p时,对于公式
i−1=−p/i×(p%i)−1modp
需要求解的状态没有办法从已知状态求解
有如下定理
当i>p,i在modp意义下的逆元等价于i%p,在modp意义下的逆元
即
i−1≡(i%p)−1(modp)
证明:
即在线性同余方程中
i×x+p×y=1,此时i>p
存在正整数q,使得
(p×q+p%i)×x+p×y=1
(p%i)×x+p×(y+q×x)=1
此时x是p%i在modp意义下的逆元
费马小定理求逆元
a×ap−2=ap−1≡1
可知,a在mod p的意义下的逆元为ap−2
用快速幂求解即可