逆元

如果存在正整数\(x\),使得对于给定的\(a\)\(m\)\(ax\equiv 1(mod\quad m)\)成立,则称\(x\)\(a\)在模\(m\)意义下的逆元,记作\(a^{-1}\)
逆元可以用来求解线性同余方程\(ay\equiv b(mod\quad m)\),假设\(a\)在模\(m\)意义下的逆元存在,那么方程两边同时乘上\(a^{-1}\),则\(y=a^{-1}b\)
扩展欧几里得算法求逆元
由于方程\(ax\equiv 1(mod\quad m)\)等价于存在正整数\(k\),使得\(ax=km+1\),也就是\(ax-km=1\),所以这个问题可以使用exgcd求解。
同时,如果\(gcd(a,m)\neq 1\),可以知道此时的逆元是不存在的。

int inv(int a,int m){
    int x,y;
    exgcd(a,m,x,y);
    return (m+x%m)%m;
}

费马小定理求逆元
根据费马小定理中\(gcd(a,p)=1\)的情况,\(a^{p-1}\equiv 1(mod\quad p)\),也就是\(a*a^{p-2}\equiv 1(mod\quad p)\),所以\(a^{-1}=a^{p-2}(mod\quad p)\),因此可以通过快速幂求出逆元。
在模数不是素数的情况下,可以类似地使用欧拉定理求解逆元。

posted @ 2020-07-10 23:40  fxq1304  阅读(74)  评论(0编辑  收藏  举报