裴蜀定理、Exgcd与乘法逆元
裴蜀定理
逆元并非对任何数存在……
定理: 有解 当且仅当 是 的倍数。
证明必要性:反证
假设 不是 的倍数。
设 ,将等式两边除以 可得:
因为 ,所以 ,就有 ,说明等式左边是一个整数。
然而 不是 的倍数,所以右边不是整数。矛盾。
那么,这和逆元有什么关系呢?
哦,发现 的时候,方程变为 ,啊发现方程一定有解。
等式两边同时模 ,,得到:
艹,这不是逆元嘛……
而且根据裴蜀定理,发现 时这个方程无解。
,此时求出的 就是
推论: 有解当且仅当 与 互质(也记作 )
例题:P4549,模板题
Exgcd 扩展欧几里得算法
此算法用于求解 的解,其中
此方法的基本思路已经在如下几篇文章里讲的很清楚了:
https://www.luogu.com.cn/blog/command-block/tong-yu-xi1
https://oi-wiki.org/math/number-theory/gcd/
得到一个求出全解的递推公式:
如果不会,可以背板子
int Exgcd(int a, int b, int &x, int &y) {
if (!b) {
x = 1;
y = 0;
return a;
}
int d = Exgcd(b, a % b, x, y);
int t = x;
x = y;
y = t - (a / b) * y;
return d;
}
我们就可以用这个求逆元,
可是注意,这里的Exgcd算法并不是基于同余的算法,所以算出的结果可能是负数,啊我们只需要加上模数再模就能保证正数。即我们求出了 ,返回要(x+mod)%mod
能够保证正数,其与x%mod(x>=0)
是等价的。
例题:P5656,exgcd模板题
等我学会了……
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现