乘法逆元应用及求法

乘法逆元的应用以及原理

乘法逆元的定义:若 a x ≡ 1 ( m o d p ) ax\equiv 1 \pmod{p} ax1(modp),就称 x x x a a a p p p的乘法逆元。

乘法逆元的应用及原理:若 a ∣ b a \mid b ab,则 b a m o d    p = b ⋅ x m o d    p \cfrac{b}{a} \mod p=b\cdot x \mod p abmodp=bxmodp1。证明:设 b = a k b=ak b=ak,即 k = b a k=\cfrac{b}{a} k=ab,就有 b ⋅ x m o d    p = a k ⋅ x m o d    p = k ⋅ ( a x ) m o d    p b\cdot x \mod p=ak\cdot x \mod p=k\cdot(ax) \mod p bxmodp=akxmodp=k(ax)modp。因为 a x ≡ 1 ( m o d p ) ax\equiv 1\pmod{p} ax1(modp),由同余定理得: k ⋅ ( a x ) ≡ k ≡ b a ( m o d p ) k\cdot(ax) \equiv k\equiv \cfrac{b}{a} \pmod{p} k(ax)kab(modp),于是得证。

求乘法逆元

费马小定理2

对于任意的质数 p p p和正整数 a a a,若满足 gcd ⁡ ( a , p ) = 1 \gcd(a,p)=1 gcd(a,p)=1,则 a p − 1 ≡ 1 ( m o d p ) a^{p-1}\equiv 1\pmod{p} ap11(modp),那么 a ⋅ a p − 2 ≡ 1 ( m o d p ) a\cdot a^{p-2}\equiv 1\pmod{p} aap21(modp),此时 a p − 2 a^{p-2} ap2就是 a a a p p p的逆元,快速幂求即可。复杂度 O ( log ⁡ 2 p ) O(\log_2p) O(log2p)

扩展欧几里得算法

由于费马小定理对 p p p a a a有限制,所以我们引入另一种方法:求解线性同余方程,也即将原同余方程转化为二元一次不定方程 a x + p k = 1 ax+pk=1 ax+pk=1的整数解。复杂度 O ( log ⁡ 2 n ) O(\log_2 n) O(log2n),其中 n n n a , p a,p a,p的取值范围。

线性递推

如果要求出 [ 1 , n ] [1,n] [1,n]中每个数模 p p p的乘法逆元(不存在则为 0 0 0),我们就可以采用 O ( n ) O(n) O(n)的线性递推方法。首先有 1 − 1 ≡ 1 ( m o d p ) 1^{-1}\equiv 1 \pmod{p} 111(modp) 1 1 1就是 1 1 1的乘法逆元)( x − 1 x^{-1} x1表示 x x x的乘法逆元)。对于大于 1 1 1的正整数 x x x,我们假设 p = k x + b p=kx+b p=kx+b,其中 k = ⌊ p x ⌋ k=\left\lfloor\cfrac{p}{x}\right\rfloor k=xp b = p m o d    x b=p\mod x b=pmodx。于是可以得到:
k x + b ≡ 0 ( m o d p ) kx+b\equiv 0 \pmod{p} kx+b0(modp)
两边同时乘以 x − 1 b − 1 x^{-1}b^{-1} x1b1,得到:
k b − 1 + x − 1 ≡ 0 ( m o d p ) kb^{-1}+x^{-1}\equiv 0 \pmod{p} kb1+x10(modp)
那么可以得到:
x − 1 ≡ − k b − 1 ( m o d p ) x^{-1}\equiv -kb^{-1} \pmod{p} x1kb1(modp)
k k k b b b的值带入,得到:
x − 1 ≡ − ⌊ p x ⌋ ⋅ ( p m o d    x ) − 1 ( m o d p ) x^{-1}\equiv -\left\lfloor\cfrac{p}{x}\right\rfloor\cdot(p\mod x)^{-1} \pmod{p} x1xp(pmodx)1(modp)
如果说 x x x有一个逆元 r r r,那么 r + m p r+mp r+mp一定都是 x x x的逆元,因为 x ( r + m p ) ≡ x r ≡ 1 ( m o d p ) x(r+mp)\equiv xr \equiv 1 \pmod{p} x(r+mp)xr1(modp)。所以说所有满足 t ≡ − ⌊ p x ⌋ ⋅ ( p m o d    x ) − 1 ( m o d p ) t\equiv -\left\lfloor\cfrac{p}{x}\right\rfloor\cdot(p\mod x)^{-1} \pmod{p} txp(pmodx)1(modp) t t t都是 x x x的逆元,也就是说(-(p/x)*inv[p%x]%p+p)%p就是 x − 1 x^{-1} x1的最小整数解。由于 0 ≤ p m o d    x < x 0\leq p \mod x < x 0pmodx<x,所以 x − 1 x^{-1} x1可以由前面的数的逆元求得。如果 p m o d    x = 0 p \mod x = 0 pmodx=0,那么 x ∣ p x \mid p xp,对于 x > 1 x>1 x>1和任意的 k k k,一定有 x k ≢ 1 ( m o d p ) x k \not \equiv 1 \pmod{p} xk1(modp),那么 x x x的乘法逆元不存在,因此设为 0 0 0。而我们将 0 − 1 0^{-1} 01设为 0 0 0,则求逆元的式子仍然成立。由此式递推即可。


  1. 对于 a ∤ b a\nmid b ab ⌊ b a ⌋ m o d    p = ⌊ b a ⌋ ⋅ a a m o d    p \left\lfloor \cfrac{b}{a}\right\rfloor \mod p=\cfrac{\left\lfloor\cfrac{b}{a}\right\rfloor\cdot a}{a}\mod p abmodp=aabamodp,因此只要将 b b b转化为 ⌊ b a ⌋ ⋅ a \left\lfloor\cfrac{b}{a}\right\rfloor\cdot a aba即可。 ↩︎

  2. 关于费马小定理的证明,可以看看我的这篇文章↩︎

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值