逆元简述

定义

  1. a x ≡ 1 ( m o d b ) ax\equiv 1 \pmod{b} ax1(modb) 时, x x x 即为 a a a 在膜 b b b 意义下的逆元。
  2. 逆元的数学符号是 i n v inv inv a a a 在膜 b b b 意义下的逆元记作 i n v ( a , b ) inv(a,b) inv(a,b) 。注意不要写反了。

求法

  1. 费马小定理
    这是一个在数论中很重要的定理:

    p p p 为质数且 gcd ( a , p ) = 1 \text{gcd}(a,p)=1 gcd(a,p)=1 时, a p − 1 ≡ 1 ( m o d p ) a^{p-1}\equiv1 \pmod{p} ap11(modp)

    简单地变形后,就有 a × a p − 2 ≡ 1 ( m o d p ) a×a^{p-2}\equiv 1 \pmod{p} a×ap21(modp)
    所以 a p − 2 a^{p-2} ap2 就是 a a a 在膜 p p p 意义下的逆元。
    用快速幂求出 a p − 2  mod  p a^{p-2}\text{ mod }p ap2 mod p 就是答案。
    可以用 O ( log ⁡ p ) \mathcal{O(\log p)} O(logp) 的速度求逆元,但是有特殊限制。

  2. 扩展欧几里得算法
    本人博客里的扩欧详解已经讲了用扩欧求逆元的方法,所以这里就不讲了,直接附链接:扩欧详解
    速度也是 log ⁡ \log log 级别的(但是具体是哪个数的 log ⁡ \log log 我不知道),而且没有特殊限制。

  3. 线性求 1 ∼ n 1\sim n 1n 的逆元
    内容较多,所以写到这里
    可以 O ( n ) \mathcal{O(n)} O(n) 求出 1 ∼ n 1\sim n 1n 的逆元

  4. 线性求 1 ∼ n 1 \sim n 1n 阶乘的逆元
    设模数为 p p p
    首先求出 n ! n! n! 的逆元,然后我们可以得到 i n v ( ( n − 1 ) ! , p ) = i n v ( n ! , p ) × n   m o d   p inv((n-1)!,p)=inv(n!,p)\times n \bmod p inv((n1)!,p)=inv(n!,p)×nmodp 。像这样逆推就可以了。
    i n v ( n ! , p ) inv(n!,p) inv(n!,p) 的复杂度仅为 log ⁡ \log log 级别,忽略不计的话这就是 O ( n ) \mathcal O(n) O(n) 的了
    你也可以用线性求阶乘+线性求逆元来完成线性求阶乘逆元,但这种方法常数较大,码量也略大一点点,不建议使用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值