乘法逆元
定义:对于正整数 a a a,存在至少一个 x x x使得 a x ≡ 1 m o d p ax\equiv1\mod p ax≡1modp ,则称所有满足以上条件的 x x x均为 a a a在模 p p p意义下的乘法逆元,一般记作 a − 1 a^{-1} a−1。
- 用扩展欧几里得算法求逆元
本质是求线性同余方程 a x ≡ 1 m o d p ax\equiv1 \mod p ax≡1modp的解 x x x。
上式可变形为 a x + p y = 1 ( x , y ∈ N ) ax+py=1(x,y \in N) ax+py=1(x,y∈N),由裴蜀定理可知, g c d ( a , p ) = 1 gcd(a,p)=1 gcd(a,p)=1。
扩展欧几里得算法即是基于以上等式诞生的。
int exgcd(int a,int b,int &x,int &y){
if(b==0){
x=1,y=0;
return a;
}
int d=exgcd(b,a%b,y,x);
y-=a/b*x;
return d;
}
-
p
p
p为质数时,利用费马小定理简化求逆元
费马小定理:当 p p p为质数时,线性同余方程 a x ≡ 1 m o d p ax \equiv 1\mod p ax≡1modp 必存在解 x = a p − 2 x=a^{p-2} x=ap−2。
因此在此特殊条件下,求乘法逆元即为求 a p − 2 m o d p a^{p-2}\mod p ap−2modp,而这个高次幂可以简单地通过循环求出,或者用快速幂加速得出。故此代码省略。