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


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

 

 

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

用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 #这个才是输出

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


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM