如何线性求[1,p-1]的逆元

本文介绍了在解决bzoj 4011问题时学习到的线性递推求解[1,p-1]在模p下逆元的技巧。当p为素数时,利用逆元定义和数学推导,可以得出逆元的计算公式:a−1 ≡ (p - ⌊ap⌋) * (p % a) ^ (-1) (mod p)。并提供了相应的代码实现。" 105111463,7341933,MybatisPlus数据库兼容与关键字处理策略,"['Mybatis', 'Java', '数据库', 'ORM框架']

今天做了一下bzoj 4011,顺便学习了一波如何线性递推求[1,p-1]在模p下的逆元。注意p为素数。
aaa的逆元为a−1a^{-1}a1,根据逆元的定义显然有a∗a−1≡1(modp)a*a^{-1}\equiv1\pmod paa11(modp)

首先有1的逆元就是1.
假设现在已经球出了[1,a−1][1,a-1][1,a1]的逆元,现在考虑如何求aaa的逆元。

k=⌊pa⌋,r=pmod  ak=\lfloor\frac{p}{a}\rfloor,r=p\mod ak=ap,r=pmoda

k∗a+r=pk*a+r=pka+r=p

k∗a+r≡0(modp)k*a+r\equiv0\pmod pka+r0(modp)

(k∗a+r)∗a−1∗r−1≡0(modp)(k*a+r)*a^{-1}*r^{-1}\equiv0\pmod p(ka+r)a1r10(modp)

k∗r−1+a−1≡0(modp)k*r^{-1}+a^{-1}\equiv0\pmod pkr1+a10(modp)

a−1≡−k∗r−1(modp)a^{-1}\equiv-k*r^{-1}\pmod pa1kr1(modp)

a−1≡−⌊pa⌋∗(pmod  a)−1(modp)a^{-1}\equiv-\lfloor\frac{p}{a}\rfloor*(p\mod a)^{-1}\pmod pa1ap(pmoda)1(modp)

a−1≡(p−⌊pa⌋)∗(pmod  a)−1(modp)a^{-1}\equiv(p-\lfloor\frac{p}{a}\rfloor)*(p\mod a)^{-1}\pmod pa1(pap)(pmoda)1(modp)

代码如下:

inv[1]=1;
for(int i=2;i<=n;i++)
    inv[i]=(p-p/i)*inv[p%i]%p;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值