扩展欧几里得算法求模的乘法逆元

我们首先了解一下欧几里得算法

这个我们在小学应该就接触过 利用辗转相除法求最大公约数

用python代码表示一下:

def gcd(a,b):
    if a < b:
        a,b = b,a
    while b!=0:
        a ,b= b,a%b
    return a

接着我们要了解加法逆元与乘法逆元

 加法逆元就是:

 乘法逆元:

接下来再是利用扩展欧几里得算法求乘法逆元

 这里求的 是整数d关于m(要取余的那个)的乘法逆元

我们用python表示下

def findModReverse(a, m) :

    if gcd(a, m) != 1:

      return None #这样肯定没答案 自己体会

    ul,u2, u3 =1,0, a

    v1, v2, v3 =0, 1,m

    while v3!=0:

        q=u3//v3

        vl, v2, v3, ul, u2, u3 = (u1-q*v1), (u2-q*v2), (u3-q*v3), vl, v2,v3
    return u1%m #这个才是输出

 这些算法是密码学等应用比较广泛的

猜你喜欢

转载自www.cnblogs.com/ranzhong/p/12926452.html