【知识点】欧几里得算法求最大公约数
最大公约数
所为的最大公约数,是指两个或多个整数共有的约数中最大的那个数。换句话说,它是能同时整除给定的整数的最大整数。
例如,对于整数
最大公约数的应用范围非常的广泛,我们常见的加密算法、分数的简化、时间频率的调整都离不开计算两个数的最大公约数。
普通算法求解最大公约数
对于求两个较小的数字的最大公约数,一个非常简单的方法就是遍历所有小于这两个数字的数字,并通过枚举的方法求出所有因数中最大的那一个因数。
具体代码如下:
int gcd(int a, int b) {
// 初始化最大公约数为1,因为1是所有整数的公约数
int result = 1;
for (int i = 2; i <= a && i <= b; ++i) {
if (a % i == 0 && b % i == 0) {
// 更新最大公约数
result = i;
}
}
return result;
}
这种方法固然简便,但是速度比较慢。若给定的两个数字都是质数,那么这两个数的最大公因数都是
显然我们需要找到一个更优的算法来解决寻找最大公因数问题的解。
欧几里得算法
早在古希腊时期,著名几何学之父欧几里得就在他的作品中提到过 GCD 算法。在计算机史上,这可以称之为是世界上第一个"算法",算法的概念也就从此诞生了。
欧几里得算法的内容就是快速求出两个数字
再根据余数的基本性质:
这样子就可以通过递归的方式快速求的
int gcd(int a, int b) {
if (b == 0) return a;
return gcd(b, a % b);
}
欧几里得算法的证明
首先要证明递归的有穷性,即证明算法会在有限步骤内结束。在递归的过程中,每一步两个参数的值都会减少。而在有限的步数内,被除数必然会等于
众所周知,无法证明正确性的算法不是好算法(事实上,算法的五大要素之一就是正确性)。尽管欧几里得算法有许多证明方法,但这里就提供一个最好理解的(归纳法)。
欧几里得算法的正确性来源于数学上的一个基本事实:如果一个数能同时整除两个数,那么它也能整除它们的差。 例如数字
因此,如果两个整数的最大公约数是
到此为止,有关欧几里得算法的内容全部结束了。本文后续将会更新一些有关 GCD 算法的一些实际应用。
相关链接引用
Khan Academy - The Euclidean Algorithm。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具