线性时间求所有逆元

本文介绍了一种基于质数的逆元计算方法,利用特定的数学性质,通过简单的迭代过程求得任意整数a关于质数p的逆元。该算法的时间复杂度为O(n),适用于快速计算场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

规定p为质数,且1^(−1)≡1(modp)
设p=k∗a+b,b<a,1<a<p,即k∗a+b≡0(modp)
两边同时乘以a^(−1)∗b^(−1)得到 
k∗b^(−1)+a^(−1)≡0(modp)
a^(−1)≡−k∗b^(−1)(modp)
a^(−1)≡−p/a∗(pmoda)^(−1)(modp)
从头开始扫一遍即可,时间复杂度O(n)

代码:

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

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值