【知识点】拓展欧几里得与中国剩余定理
在上一篇文章中,我们已经熟知了有关公约数和欧几里得算法的相关事宜。详情参见:欧几里得算法求最大公约数。本文将作为上篇文章内容的一个延续,简要阐述拓展欧几里得算法和中国剩余定理。
拓展欧几里得算法
拓展欧几里得算法(Extended Euclidian Algorithm),是欧几里得算法的扩展版本,用于在计算两个数的最大公约数
举例而言,如果给定两个整数
与此同时,我们也将这个方程称之为 贝祖等式(Bézout's identity)。拓展欧几里得算法在数论和计算机应用方面有着极其突出的贡献和广泛的应用。例如求解线性同余方程,本文也将会围绕求解同余方程来展开。
线性同余方程
线性同余方程指的是形如
具体地说,线性同余方程要求找到一个整数
拓展欧几里得算法过程推导
拓展欧几里得算法与普通的欧几里得算法相同,都可以通过递归的方式来非常简便地计算出结果。
假设有两个非负整数
因为
经过化简可以得到:
由此可以看出,
拓展欧几里得算法代码
int extended_gcd(int a, int b, int &x, int &y) {
if (a == 0) {
x = 0, y = 1;
return b;
}
int x1, y1;
int gcd = extended_gcd(b % a, a, x1, y1);
x = y1 - (b / a) * x1;
y = x1;
return gcd;
}
参考上述代码,extended_gcd
函数接受两个整数
中国剩余定理背景
谈到了求解同余方程,那就不得不提 中国剩余定理(Chinese Remainder Theorem)。中国剩余定理又称“孙子定理”,最早可见于中国南北朝时期(公元5世纪)的数学著作《孙子算经》卷下第二十六题,叫做 “物不知数” 问题,原文如下(百度百科提供):
有物不知其数,三三数之剩二,五五数之剩三,七七数之剩二。问物几何?即,一个整数除以三余二,除以五余三,除以七余二,求这个整数。《孙子算经》中首次提到了同余方程组问题,以及以上具体问题的解法,因此在中文数学文献中也会将中国剩余定理称为孙子定理。
中国剩余定理提供了一种在模数互素的情况下解决一组同余方程组的方法,而拓展欧几里得算法可以用来计算模数不互素的情况下的解。
中国剩余定理算法与推导
在中国剩余定理中,假设有一个同余方程组:
其中,
当模数不互素时,我们可以使用拓展欧几里得算法来辅助求解。具体步骤如下:
- 计算
。 - 对于每一个
,计算 。 - 对于每个
,使用拓展欧几里得算法计算 在模 下的逆元 。 - 最后的解
可以通过如下公式计算: 。
中国剩余定理代码示例
int chinese_remainder_theorem(const vector<int> &a, const vector<int> &m) {
int M = 1;
for (int mi : m) {
M *= mi;
}
int result = 0;
for (size_t i = 0; i < a.size(); ++i) {
int ai = a[i];
int mi = m[i];
int Mi = M / mi;
int xi, yi;
extended_gcd(Mi, mi, xi, yi);
result = (result + ai * Mi * xi) % M;
}
// 保证结果为正
if (result < 0) {
result += M;
}
return result;
}
其中 a
向量 和 b
向量 分别表示余数数组和模数数组。
相关引用
- GeeksforGeeks. Euclidean Algorithms - Basic and Extended. GeeksforGeeks, https://www.geeksforgeeks.org/euclidean-algorithms-basic-and-extended/, accessed May 22, 2024.
- GeeksforGeeks. Introduction to Chinese Remainder Theorem. GeeksforGeeks, https://www.geeksforgeeks.org/introduction-to-chinese-remainder-theorem/, accessed May 22, 2024.
- cp-algorithms contributors. "Chinese Remainder Theorem." cp-algorithms, Oct 16, 2023, https://cp-algorithms.com/algebra/chinese-remainder-theorem.html. Accessed May 22, 2024.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具