模意义下求乘法逆元的各种姿势

本文详细介绍了乘法逆元的概念及其在模运算中的作用。包括逆元的定义、求法如扩展欧几里得算法(EXGCD)、费马小定理及欧拉定理的应用,以及如何通过递推方式快速预处理逆元。
乘法逆元
定义

ax1modpax≡1modp,则称xxamodpmodp意义下的逆元,记为xa1modpx≡a−1modp

当然,aa也是xmodpmodp意义下的逆元

ab=ab1ab=a⋅b−1

几乎所有模意义下的除法都需要逆元

有逆元的充要条件

aamodp意义下有逆元的充要条件:(a,p)=1(a,p)=1

逆元的求法
EXGCD

若求aamodp意义下的逆元,则可以转化为求解如下方程

ax+py=1ax+py=1

有EXGCD的相关知识可以得到,当且仅当(a,p)=1(a,p)=1时有解(有逆元的充要条件的证明)
费马小定理

如果pp为质数,则ap11modp

aap21∴a⋅ap−2≡1

ap2a1∴ap−2≡a−1

欧拉定理

将费马小定理中的p2p−2换为φ(p)1φ(p)−1即可

pp可以不是质数

递推

用于O(n)预处理[1n][1⋯n]的逆元

构造p=ki+rp=ki+r

ki+r0modp∴ki+r≡0modp

ki=r∴ki=−r

i1=kr1∴i−1=−k⋅r−1

其中k=pi,r=p%ik=⌊pi⌋,r=p%i

i1=piinv[p%i]∴i−1=−⌊pi⌋⋅inv[p%i]

为了防止出现负数,通常的写法是这样的

inv[i]=(mod-mod/i)*inv[mod%i]%mod;
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值