逆元的三种计算方法
逆元的三种计算方法
- 快速幂求逆元
- 扩展欧几里得求逆元
- 线性求逆元
快速幂求逆元
前提:p为质数
由费马小定理知:在p为质数的情况下,的变形为:
则就是逆元
int inv(int x,int p) {return qmi(x, p - 2, p) % p;} int res = inv(a, p); if (a % p) printf("%d\n", res); else puts("impossible");
扩展欧几里得求逆元
前提:a与p互质
- 将乘法逆元转化为不定方程,等价变形
- 扩展欧几里得求的解,即答案
int a, p, x, y; cin >> a >> p; exgcd(a, p, x, y); cout << (x % p + p) % p << endl;
线性求逆元
线性求逆元
在求某个数的逆元时使用费马小定理或扩展欧几里得定理,而在求到连续的关于的逆元,而较大时,时间复杂度吃不消,可以使用下面算法在的时间复杂度内解决
前提:为素数
递推式:
推导过程:
的逆元为,初始化,这样就可以通过递推式得到的所有逆元了
inv[0] = inv[1] = 1; for (int i = 2; i <= n; i++) { inv[i] = (p - p / i) * inv[p % i] % p; }
本文作者:-37-
本文链接:https://www.cnblogs.com/-37-/p/17703560.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具