裴蜀定理
裴蜀定理
在数论中,裴蜀等式(英语:Bézout's identity)或裴蜀定理(Bézout's lemma)(或称贝祖等式)是一个关于最大公约数(或最大公约式)的定理。裴蜀定理得名于法国数学家艾蒂安·裴蜀,说明了对任何整数
和 和 ,关于未知数 和 的线性丢番图方程(称为裴蜀定理) 有整数解时当且仅当 是 和 的最大公约数 的倍数。裴蜀等式有解时必然有无穷多个整数解,每组解 、 都称为裴蜀数,可用扩展欧几里得算法求得。[1]
特别的,当和 互质时,裴蜀定理说明了存在整数 和 使得 ,这是裴蜀定理的一个推论。[1:1]
想要完整理解裴蜀定理,我们首先从最大公约数开始。
1. 辗转相除法
最大公约数(Greatest Common Divisor,GCD)是指能够整除给定整数集合中所有整数的最大的那个数。
设
证明:
设
由于
由于
同理,对于
当如此循环往复,直到
证明结束。
写成公式表示:
使用递归的方式实现:
int gcd(int a, int b)
{
return b ? gcd(b, a % b) : a;
}
2. 扩展欧几里得算法
扩展欧几里得算法是求解裴蜀等式的一种算法,它可以在
前文已经提到,裴蜀等式
证明[1:2]过程详见维基百科。
我们根据证明可以得到,若裴蜀等式
根据辗转相除法,我们可以得到:
(注: 这里得符号 %
表示的是求余,因此下面我们讨论的范围是
展开裴蜀等式,在
(注: 这里
-
当
时,根据前文的辗转相除法, 。由此我们可以得到:故得:
继续计算,我们可以得到:
-
当
时,我们可以得到:解得:
令上述递推式中的
// @param a, b: 两个正整数
// @param x, y: 一组解,利用引用带出递归函数
// @return: a 和 b 的最大公约数
int ExGcd(int a, int b, int &x, int &y)
{
if (b == 0) // 递归边界 b = 0
{
x = 1;
y = 0;
return a;
}
// 递归求解
// 1. 计算 x1, y1
int r = ExGcd(b, a % b, x, y); // 递归求解gcd(b, a % b)
int x1 = x; // 保存 x1
x = y; // 更新 x
y = x1 - a / b * y; // 用y1和x1更新y
return r;
}
个人见解,谨慎参考。
欢迎讨论!
维基百科编者. 貝祖等式[G/OL]. 维基百科, 2023(20231104)[2023-11-04]. https://zh.wikipedia.org/w/index.php?title=貝祖等式&oldid=79621447. ↩︎ ↩︎ ↩︎
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)