逆元
定义
对于非零整数 a,m,如果存在 b 使得 ab≡1(modp),就称 b 是 a 在模 m 意义下的 逆元(inverse),记作 b=a−1(modp)。
特别注意
如果 a≡1(modm),则称 a 在模 m 意义下 不存在逆元,因为 任意数 都是 a 在模 m 意义下的逆元。
背景
我们知道,对于除法操作来说取模操作不具有分配性,即:
bamodp=bmodpamodp毕竟一般的取模操作只对整数有意义。
这时候需要引入逆元进行操作:
ba=ab−1
举个例子
510(mod3)=5mod310mod3在模 3 意义下5×2≡1(mod3)⇒2是5在模3意义下的逆元
故:
510mod3=(10×2)mod3=20mod3=2
由此也可以引申出有理数的取模运算:
给出一个有理数 c=ba,则 cmodp 的值被定义为 b 在模 p 意义下的逆元。
求解方法
费马小定理
费马小定理
设 p 是素数,a 是不被 p 整除的整数,则有:
ap−1≡1(modp)由此可得:
ap−2≡a−1(modp)即 a 在模 p 意义下的逆元为 ap−2modp。
使用快速幂求解即可。
int qpow(int a,int b){
int ret = 1;
for(;b;b>>=1,a*=a,a%=mod)if(b & 1)ret *= a,ret %= mod;
return ret;
}
int inverse = qpow(b-1,mod-2)
扩展欧几里得算法
ax≡1(modp) 可转换成一个 丢番图方程 的形式:ax−bp=1
通过丢番图方程求解。