乘法逆元

乘法逆元小结

乘法逆元,一般用于求 ab(modp) 的值(p 通常为质数),是解决模意义下分数数值的必要手段。

有兴趣可以点进我的博客看看啊qwq

逆元定义

ax1(modb),且ab互质,那么我们就能定义:
xa 的逆元,记为a1,所以我们也可以称 xamodb 意义下的倒数,

所以对于 ab(modp) ,我们就可以求出 bmodp 下的逆元,然后乘上 a ,再 modp,就是这个分数的值了。

求解逆元的方式

拓展欧几里得

这个方法十分容易理解,而且对于单个查找效率似乎也还不错,比后面要介绍的大部分方法都要快(尤其对于 modp 比较大的时候)。

这个就是利用拓欧求解 线性同余方程 axc(modb)c=1的情况。我们就可以转化为解 ax+by=1 这个方程。

求解这个方程的解。不会拓欧可以点这里~

而且这个做法还有个好处在于,当 ap (互质),但 p 不是质数的时候也可以使用。

代码比较简单:

void Exgcd(ll a, ll b, ll &x, ll &y) { if (!b) x = 1, y = 0; else Exgcd(b, a % b, y, x), y -= a / b * x; } int main() { ll x, y; Exgcd (a, p, x, y); x = (x % p + p) % p; printf ("%d\n", x); //x是a在mod p下的逆元 }

快速幂

这个做法要利用 费马小定理

p为素数,a为正整数,且ap互质。
则有ap11(modp)

这个我们就可以发现它这个式子右边刚好为 1

所以我们就可以放入原式,就可以得到:

ax1(modp)

axap1(modp)

xap2(modp)

所以我们可以用快速幂来算出 ap2(modp)的值,这个数就是它的逆元了

代码也很简单:

ll fpm(ll x, ll power, ll mod) { x %= mod; ll ans = 1; for (; power; power >>= 1, (x *= x) %= mod) if(power & 1) (ans *= x) %= mod; return ans; } int main() { ll x = fpm(a, p - 2, p); //x为a在mod p意义下的逆元 }

线性算法

用于求一连串数字对于一个modp的逆元。洛谷P3811

只能用这种方法,别的算法都比这些要求一串要慢。

首先我们有一个,111(modp)

然后设 p=ki+r,(1<r<i<p) 也就是 kp/i 的商,r 是余数 。

再将这个式子放到(modp)意义下就会得到:

ki+r0(modp)

然后乘上i1,r1就可以得到:

kr1+i10(modp)

i1kr1(modp)

i1pi(pmodi)1(modp)

于是,我们就可以从前面推出当前的逆元了。

代码也很短:

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

阶乘逆元 O(n)

因为有如下一个递推关系。

inv[i+1]=1(i+1)!

inv[i+1](i+1)=1i!=inv[i]

所以我们可以求出n!的逆元,然后逆推,就可以求出1...n!所有的逆元了。

递推式为

inv[i+1](i+1)=inv[i]

所以我们可以求出 i,i!,1i! 的取值了。

然后这个也可以导出 1i(modp) 的取值,也就是

1i!×(i1)!=1i(modp)

具体实现可以参考我这发提交(卡了常。。)


__EOF__

本文作者zjp_shadow
本文链接https://www.cnblogs.com/zjp-shadow/p/7773566.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   zjp_shadow  阅读(11387)  评论(10编辑  收藏  举报
编辑推荐:
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
阅读排行:
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
· 为什么 退出登录 或 修改密码 无法使 token 失效
点击右上角即可分享
微信分享提示