浅谈乘法逆元

一.啥是逆元

若整数 b , p b,p b,p互质,且 b ∣ a b\mid a ba,则存在一个整数 x x x,使得 a b ≡ a × x ( m o d p ) \dfrac{a}{b}\equiv a\times x\pmod{p} baa×x(modp)。称 x x x b b b的模 p p p乘法逆元,记为 b − 1 ( m o d p ) b^{-1}\pmod{p} b1(modp)

能不能整点人能看懂的

人能看懂的来了

b x ≡ 1 ( m o d p ) bx\equiv1\pmod{p} bx1(modp),称 x x x b b b p p p的乘法逆元。前提是 x , p x,p x,p互质,否则无解。

 

二.逆元砸球

1.费马小定理

p p p为质数,且 gcd ⁡ ( a , p ) = 1 \gcd(a,p)=1 gcd(a,p)=1,那么

a − 1 ≡ 1 ( m o d p ) a^{-1}\equiv1\pmod{p} a11(modp)

读者自证不难

∵ a − 1 ≡ 1 ( m o d p ) \because a^{-1}\equiv1\pmod{p} a11(modp)
∴ a × a − 2 ≡ 1 ( m o d p ) \therefore a\times a^{-2}\equiv1\pmod{p} a×a21(modp)

a − 2 a^{-2} a2 a a a在模 p p p意义下的乘法逆元,所以就可以用快速幂求解

2.扩欧(不知道啥时扩欧的点这里

这就是扩欧模板了吧。。。

b x ≡ 1 ( m o d p ) bx\equiv1\pmod{p} bx1(modp)

等价于方程

b x − p y = 1 bx-py=1 bxpy=1

直接上模板好吧。

3.线性递推

参考zjp_shadow的逆元题解

用于求一连串数字的逆元。P3811

首先有: 1 − 1 ≡ 1 ( m o d p ) 1^{-1}\equiv1\pmod{p} 111(modp)

不妨设 p = k × i + r ( 1 < r < i < p ) p=k\times i + r(1 < r < i < p) p=k×i+r(1<r<i<p)

则有

k × i + r ≡ 0 ( m o d p ) k \times i + r \equiv0\pmod{p} k×i+r0(modp)

∴ k × r − 1 + i − 1 ≡ 0 ( m o d p ) \therefore k\times r^{-1} + i^{-1}\equiv0\pmod{p} k×r1+i10(modp)

∴ i − 1 ≡ − k × r − 1 ( m o d p ) \therefore i^{-1}\equiv-k\times r^{-1}\pmod{p} i1k×r1(modp)

∴ i − 1 ≡ − ⌊ p i ⌋ × ( p m o d    i ) − 1 ( m o d p ) \therefore i^{-1}\equiv -\left\lfloor\dfrac{p}{i}\right\rfloor \times (p \mod i)^{-1}\pmod{p} i1ip×(pmodi)1(modp)

然后就可以线性时间求出逆元了


inv[1] = 1;
for(int i = 2; i < p; ++ i)
    inv[i] = (p - p / i) * inv[p % i] % p;

 

完结撒花!!!

转自本人luogu博客
  • 18
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值