数论1 逆元

182 阅读1分钟

定义

每个数a都有与其对应的乘法逆元x,使得ax1(modn)使得ax\equiv 1(mod n)
有逆元的充要条件为:gcd(a,n)=1gcd(a,n)=1
定义:对于正整数a,n。如果有ax1(modn)x最小整数解为an的逆元对于正整数a,n。如果有ax\equiv 1(modn)称x最小整数解为a模n的逆元

用途1.求大数乘法取模

abmodp=(ak)modp其中kb关于p的乘法逆元。\frac{a}{b}modp=(a*k)modp 其中k为b关于p的乘法逆元。

应用:a或b很大,会暴精度时使用。
证明:bk1(modp),bk=px+1,k=px+1bb*k\equiv 1 (modp),b*k=p*x+1,k=\frac{p*x+1}{b}
k带入(ak)modp:apx+abmodp=apxbmodp+abmodp将k带入(a*k)mod p得:\frac{a*p*x+a}{b}mod p=\frac{a*p*x}{b}modp+\frac{a}{b}modp
=0+abmodp=abmodp=0+\frac{a}{b}modp=\frac{a}{b}modp
证毕。\

逆元的求法

1.暴力遍历
给定模m,要求逆元的元素x.遍历1-m-1.寻找是否有元素满足。
2.扩展欧几里得算法

给定模m,a的逆元相当于ax1modm.方程可转换为axmy=1给定模m,求a的逆元相当于ax\equiv1modm.方程可转换为ax-my=1。

套用二元一次方程的解法。用扩展欧几里得算法求得X0,Y0,和gcd。gcd不为1说明逆元不存在。
python模板

def exgcd(a, b):
    global x, y
    if b == 0:
        x, y = 1, 0
        return a
    d = exgcd(b, a % b)
    x, y = y, x
    y -= (a // b) * x
    return d