C++欧几里得算法求最大公约数和最小公倍数
定义
最大公约数即为 Greatest Common Divisor,常缩写为 gcd。
一组整数的公约数,是指同时是这组数中每一个数的约数的数。
一组整数的最大公约数,是指所有公约数里面最大的一个。
那么如何求最大公约数呢?我们先考虑两个数的情况。
欧几里得算法
过程
如果我们已知两个数
不妨设
我们发现如果 b 是 a 的约数,那么 b 就是二者的最大公约数。 下面讨论不能整除的情况,即
其中
我们通过证明可以得到
设
由右边的式子可知
反过来也需要证明:
设
因为左边式子显然为整数,所以
既然两式公约数都是相同的,那么最大公约数也会相同。
所以得到式子
既然得到了
实现
int gcd(int a, int b) {
if(b == 0) return a;
return gcd(b, a % b);
}
最小公倍数
int gcd(int a, int b) {
if(b == 0) return a;
return gcd(b, a % b);
}
int lcm = a * b / gcd(a, b);
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探