逆元浅析

单独的考逆元,现在已经不多了
但是掌握很有必要

逆元是什么

当题目中最终答案太大时,往往会要求我们模一个数。这样的题往往是dpdp、递推之类。所以我们要步步取模。但如果某一步中出现了除法,或者一道概率dpdp 要求答案取模,这时就要涉及到模意义下的除法。
例如:a/b%m.这时我们将式子变形得到 a×1bmodma×1bmodm这样就得到了一个乘法。
设c是逆元,得b1c(modm)b−1≡c(modm)
b×c1(modm)b×c≡1(modm)

怎么求单个的逆元

显然可以用exgcdexgcd解这个方程。
b×c+m×k=1b×c+m×k=1
求得最小的一个cc即可。
还有,注意到了这个方程是不一定有解的,意思就是说不一定有逆元。但注意到m为质数一定有解。这为接下来的线性求逆元提了个醒:只有质数才能线性求逆元。
另外一种做法,是使用欧拉定理。
有欧拉定理有:

aϕ(p)1aϕ(p)≡1

所以逆元可求为bϕ(m)1bϕ(m)−1
注意到这个不能判断是否有逆元,使用时要注意。然后具体操作时,只需打一个快速幂就可以了。(一般模的是质数,所以ϕ(p)=p1ϕ(p)=p−1);

怎么线性求逆元

逆元有一种线性求法,就是在O(n)O(n)内求1~n的逆元。
具体推理与操作过程如下;

p=k×i+rp=k×i+r

p0(modp)p≡0(modp)

k×i+r0(modp)k×i+r≡0(modp)

为了强行构造逆元,我们同乘i1×r1i−1×r−1
k×r1+i10(modp)k×r−1+i−1≡0(modp)

i1k×r1(modp)i−1≡−k×r−1(modp)

i1[pi]×(pmodi)1(modp)i−1≡−[pi]×(pmodi)−1(modp)

实际操作中仍有以下两点需要注意
  1. 注意到右边是一个负数,实际中要加p再去模。
  2. 注意到这里只能求比p小的逆元,实际上比p大的模一个p就可以了。

代码

会后续补充…….

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值