Python实现扩展欧几里得算法求乘法逆元
1. 扩展欧几里得算法
已知整数a、b,扩展欧几里得算法可以在求得a、b的最大公约数的同时,能找到整数x、y(其中一个很可能是负数),使它们满足贝祖等式
a x + b y = g c d ( a , b ) ax+by=gcd(a,b) ax+by=gcd(a,b)
如果a是负数,可以把问题转化成 ∣ a ∣ ( − x ) + b y = g c d ( ∣ a ∣ , b ) |a|(-x)+by=gcd(|a|,b) ∣a∣(−x)+by=gcd(∣a∣,b),然后令x’=(-x)。
2. 求最大公因数
def gcd(a,b,s):
if a%b == 0:
return b,s
q = a//b
temp = s[1]
s[1] = s[0]-q*s[1]
s[0] = temp
return gcd(b,a%b,s)
3. 求乘法逆元
def ModReverse(a,n):
s = [1,0]
gcd(a,n,s)
if s[1]==0:
return -1
elif s[1]<0:
return n+s[1]
else:
return s[1]