乘法逆元

試著忘記壹切 提交于 2019-12-02 14:23:19

\[\text{乘法逆元}\]

学习博客

定义:

这是来自大佬博客的:
对于缩系中的元素,每个数\(a\)均有唯一的与之对应的乘法逆元\(x\),使得\(ax \equiv 1 (mod \ n)\),一个数有逆元的充分必要条件是\(gcd(a,n)=1\),此时逆元唯一存在

求逆元的几种方法
1.扩展欧几里得算法

\(a\)的逆元是\(x\)\(x\)满足\(ax\equiv1\)(这是上边定义里已经说了的),因为除法的实质是减法所以,方程也可以写为\(ax-my=1\),求得一组解之后判断\(gcd(x,y)\)是否是一,如果不是则说明不是,因为我们用\(exgcd\)求得就是一组最小解了。如果是,则需调整\(x\)到相应范围\((0到m-1)\)
Code:

int exgcd(int a, int b, int & x, int & y) {
    if(!b) {x = 1, y = 0; return;}
    int d = exgcd(b, a % b, y, x);
    y -= a / b * x;
    return d;
}
int inv(int a, int n) {
    int x, y;
    int d = exgcd(a, n, x, y);
    return d == 1 ? (x + n) % n : -1;
}
费马小定理:

前面说费马小定理的时候就点到过,他其实是欧拉定理的一种特殊情况
\(a^{p-1}\equiv1(mod \ n)\)
\(a^{p-2}\equiv a^{-1}(mod \ n)\)
除以一个数等于乘上这个数的逆元
众所周知除以一个数等于乘他的倒数,而此时的指数为\(-1\)正好就是他的倒数,也就是他的逆元,如果模数不为素数那就应用欧拉定理\(a^{\varphi(m)}\equiv 1(mod \ m)\)同理\(a\)的逆元就是\(a^{\varphi(m)-1}\)需要注意\(a\)\(m\)要求必须互质。
用快速幂即可求得
需要检验求出的幂值\(x\)\(a\)相乘是否为\(1\)即可
其实这个检验我刚刚趴了桌子上想啊想也没想明白为什么
就先这样记住吧
Code:

int power(int x, int y) {
    int sum = 1;
    while(y) {
        if(y & 1) sum = (sum * x) % md;
        x = (x * x) % md;
        y >>= 1;
    }
    return sum;
}

其实就是个快速幂的板子主要就是看y的次数

补充一下:

有一个定西叫做求逆元一般公式
\(x=a/b \ mod \ m = x \ mod \ (m *b)/b\)

简单证明:

\(\frac{a}{b} mod \ k = d\)
\(\frac{a}{b}= kx+d\)
\(a=kbx+bd\)
\(a \ mod \ kb=bd\)
\(\frac{a \ mod \ kb}{b}=d\)

因为这个式子里有\(k*b\)需要注意一下他俩很大的时候

还是费马小比较的好写qwq

谢谢收看,住身体健康!

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!