【乘法逆元】看这一篇就够了!乘法逆元的证明、详解及应用。

本文章为乘法逆元详解。

前一到二节属于前置知识:同余。

乘法逆元的讲解从第三节开始。

一、同余运算

  1. ( a + b )   m o d   m = [ ( a   m o d   m ) + ( b   m o d   m ) ]   m o d   m (a+b)\bmod m=[(a\bmod m)+(b\bmod m)]\bmod m (a+b)modm=[(amodm)+(bmodm)]modm

  2. ( a − b )   m o d   m = [ ( a   m o d   m ) − ( b   m o d   m ) + m ]   m o d   m (a-b)\bmod m=[(a\bmod m)-(b\bmod m) + m]\bmod m (ab)modm=[(amodm)(bmodm)+m]modm

  3. ( a × b )   m o d   m = [ ( a   m o d   m ) × ( b   m o d   m ) ]   m o d   m (a\times b) \bmod m = [(a \bmod m) \times (b \bmod m)] \bmod m (a×b)modm=[(amodm)×(bmodm)]modm

  4. ( a ÷ b )   m o d   m ≠ [ ( a   m o d   m ) ÷ ( b   m o d   m ) ]   m o d   m (a\div b) \bmod m ≠ [(a \bmod m) \div (b \bmod m)] \bmod m (a÷b)modm=[(amodm)÷(bmodm)]modm

    如: ( 12 ÷ 3 )   m o d   6 = 4 ≠ ( 12   m o d   6 ) ÷ ( 3   m o d   6 ) (12\div3) \bmod 6 = 4 ≠ (12 \bmod 6) \div (3 \bmod 6) (12÷3)mod6=4=(12mod6)÷(3mod6)

二、同余性质

  1. a ≡ b ( m o d m ) a \equiv b\pmod m ab(modm),则 m ∣ ( a − b ) m|(a-b) m(ab)

  2. 同加性,若 a ≡ b ( m o d m ) a\equiv b\pmod m ab(modm),则 a + c ≡ b + c ( m o d m ) a+c \equiv b+c \pmod m a+cb+c(modm)

  3. 同乘性,若 a ≡ b ( m o d m ) a \equiv b \pmod m ab(modm),则 a c ≡ b c ( m o d m ) ac \equiv bc \pmod m acbc(modm)

    逆性质:若 a c ≡ b c ( m o d m ) ac \equiv bc \pmod m acbc(modm) ,且 gcd ⁡ ( c , m ) = 1 \gcd(c,m)=1 gcd(c,m)=1,有 a ≡ b ( m o d m ) a \equiv b \pmod m ab(modm)

    证明: a c − p m = b c − q m ac-pm=bc-qm acpm=bcqm ( a − b ) c = ( p − q ) m (a-b)c=(p-q)m (ab)c=(pq)m c c c m m m 互质,证明 a − b a-b ab m m m 的倍数,则 a ≡ b ( m o d m ) a \equiv b \pmod m ab(modm)

  4. 同幂性:若 a ≡ b ( m o d m ) a\equiv b\pmod m ab(modm),则 a c ≡ b c ( m o d m ) a^c\equiv b^c\pmod m acbc(modm)

三、乘法逆元

对于任意整数 a a a 而言,如果 a a a p p p 互质,存在一个整数 x x x 使得 a × x ≡ 1 ( m o d p ) a\times x \equiv 1\pmod p a×x1(modp) ,则有:

b ÷ a   m o d   p = b ÷ a × ( a × x )   m o d   p = b ÷ ( a × a ) × x   m o d   p = b × x   m o d   p \begin{aligned} b\div a\bmod p&=b\div a\times(a\times x)\bmod p \\&=b\div (a\times a)\times x\bmod p\\&=b\times x\bmod p \end{aligned} b÷amodp=b÷a×(a×x)modp=b÷(a×a)×xmodp=b×xmodp

x x x a a a 在模 p p p 意义下的乘法逆元,写作 a − 1 a^{-1} a1

我们可以借此解决运算法则四遇到的问题。

例如: 2 × 5 ≡ 1 ( m o d 9 ) 2\times 5 \equiv 1\pmod 9 2×51(mod9),则 5 5 5 2 2 2 关于模 9 9 9 的乘法逆元。所以 8 ÷ 2   m o d   9 = 8 × 5   m o d   9 = 4 8\div2\bmod9=8\times5\bmod9=4 8÷2mod9=8×5mod9=4

有了乘法逆元之后, b ÷ a   m o d   p b\div a\bmod p b÷amodp,如果 a , p a,p ap 互质,那么就有:

b ÷ a   m o d   p = ( b   m o d   p × a − 1   m o d   p )   m o d   p b\div a\bmod p=(b\bmod p\times a^{-1}\bmod p)\bmod p b÷amodp=(bmodp×a1modp)modp

四、如何求乘法逆元

1.费马小定理

费马小定理:若 p p p 是质数,对任意整数 a a a 不是 p p p 的倍数,有 a p − 1 ≡ 1 ( m o d p ) a^{p-1}\equiv 1\pmod p ap11(modp),也可以写作 a p ≡ a ( m o d p ) a^{p}\equiv a\pmod p apa(modp)

证明:根据同余的性质, a , 2 a , 3 a … … , ( p − 1 ) a a,2a,3a……,(p-1)a a,2a,3a……,(p1)a 分别   m o d   p \bmod p modp 的结果各不相同。那么:

a × 2 a × 3 a … … × ( p − 1 ) a ≡ 1 × 2 × 3 … … × ( p − 1 ) ( m o d p ) a p − 1 × [ 1 × 2 × 3 … … × ( p − 1 ) ] ≡ 1 × 2 × 3 … … × ( p − 1 ) ( m o d p ) a p − 1 ≡ 1 ( m o d p ) \begin{aligned}a\times2a\times3a……\times(p-1)a&\equiv 1\times2\times 3……\times(p-1)\pmod p\\a^{p-1}\times[1\times2\times 3……\times(p-1)]&\equiv1\times2\times 3……\times(p-1)\pmod p\\a^{p-1}&\equiv 1\pmod p\end{aligned} a×2a×3a……×(p1)aap1×[1×2×3……×(p1)]ap11×2×3……×(p1)(modp)1×2×3……×(p1)(modp)1(modp)

如何求乘法逆元: 若 p p p 是质数,则有 a p − 1 ≡ 1 ( m o d p ) a^{p-1}\equiv 1\pmod p ap11(modp),而 a × x ≡ 1 ( m o d p ) a\times x\equiv 1\pmod p a×x1(modp),所以 a p − 2 a^{p-2} ap2 a a a p p p 意义下的的乘法逆元。

可以用快速幂,时间复杂度为 O ( log ⁡ p ) O(\log p) O(logp)


2.快速求阶乘逆元

a ( n − 1 ) ! ≡ a n ! × n ( m o d p ) [ ( n − 1 ) ! ] − 1 ≡ ( n ! ) − 1 × n ( m o d p ) \begin{aligned} a\over{(n-1)!}&{\equiv} {{a}\over{n!}}\times n{\pmod p}\\ [(n-1)!]^{-1}&\equiv (n!)^{-1}\times n\pmod p\end{aligned} (n1)!a[(n1)!]1n!a×n(modp)(n!)1×n(modp)

i n v [ n ] inv[n] inv[n] 表示 n n n 的阶乘在模 p p p 意义下的的乘法逆元 ( n < p ) (n<p) (n<p),显然 i n v [ n − 1 ] ≡ i n v [ n ] × n inv[n-1]\equiv inv[n]\times n inv[n1]inv[n]×n

可以先用费马小定理先求出 i n v [ n ] inv[n] inv[n],接着推出所有逆元。


3.快速求连续自然数逆元

假设已知 i = 1 i=1 i=1 的逆是 1 1 1。递推求 i > 1 i>1 i>1 时的逆。

  1. k k k p ÷ i p\div i p÷i 的商, r r r p ÷ i p\div i p÷i 的余数,则 k × i + r ≡ 0 ( m o d p ) k\times i+r\equiv 0\pmod p k×i+r0(modp)

  2. 在等式两边同乘 i − 1 × r − 1 i^{-1}\times r^{-1} i1×r1,得到 k × r − 1 + i − 1 ≡ 0 ( m o d p ) k\times r^{-1}+i^{-1}\equiv 0\pmod p k×r1+i10(modp)

  3. 移项得到 i − 1 ≡ − k × r − 1 ( m o d p ) i^{-1}\equiv -k\times r^{-1}\pmod p i1k×r1(modp),即 i − 1 ≡ − ⌊ p i ⌋ × r − 1 ( m o d p ) i^{-1}\equiv -\lfloor{{p}\over{i}} \rfloor\times r^{-1}\pmod p i1ip×r1(modp)

  4. 最后右边加上 p p p ,得到 i − 1 ≡ p − ⌊ p i ⌋ × r − 1 ( m o d p ) i^{-1}\equiv p-\lfloor{{p}\over{i}} \rfloor\times r^{-1}\pmod p i1pip×r1(modp)

下面是洛谷 P3811 乘法逆元 的部分代码:

long long inv[maxn];
void inverse(long long n, long long p){
    inv[1] = 1;
    for(int i = 2; i <= n; ++i)
    inv[i] = (p - p/i) * inv[p % i] % p;
}

4.非连续数字快速求逆元

设有 n n n 个非连续数字,快速求逆元。

仍然使用快速幂,复杂度为 O ( n log ⁡ n ) O(n\log n) O(nlogn),并非最优。

设:

  1. 非连续数字为 a 1 , a 2 , a 3 … … a n a_1,a_2,a_3……a_n a1a2a3……an

  2. s [ i ] = a 1 × a 2 × … … × a i s[i]=a_1\times a_2\times ……\times a_i s[i]=a1×a2×……×ai

  3. e [ i ] = a n × a n − 1 × … … × a i e[i]=a_n\times a_{n-1}\times……\times a_i e[i]=an×an1×……×ai

  4. I N V = ( a 1 × a 2 × … … × a n ) INV=(a_1\times a_2\times ……\times a_n) INV=(a1×a2×……×an)的逆元。

i n v [ i ] = I N V × s [ i − 1 ] × e [ i + 1 ] inv[i]=INV\times s[i-1]\times e[i+1] inv[i]=INV×s[i1]×e[i+1]

这样可以 O ( n ) O(n) O(n) 得到所有数的逆元。

五.结束

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值