【算法】最大公约数和最小公倍数求解
1.概念:
-
最大公约数(Greatest Common Divisor,gcd)是数学词汇,指能够整除多个整数的最大正整数。而多个整数不能都为零。例如8和12的最大公因数为4。[维基百科]
-
最小公倍数(Least Common Multiple,lcm)是数论中的一个概念。若有一个数X,可以被另外两个数A、B整除,且X大于(或等于)A和B,则X为A和B的公倍数。所有正的公倍数中,最小的公倍数叫做最小公倍数。[维基百科]
2.求解最大公约数效率最高的当属辗转相除法(也叫欧几里得法)
而求最小公倍数可以利用公式lcm = m*n/gcd
,这样最便捷。
- 代码示例如下
// 最大公约数:辗转相除法
int gcd(int m, int n)
{
if (n==0) return m;
if (m<n)
return gcd(n, m);
int reminder = 0;
while (n!=0)
{
reminder = m%n;
m = n;
n = reminder;
}
return m;
}
// gcd recursively
int gcd_iterative(int m, int n)
{
return (n==0)?m:gcd_iterative(n, m%n);
}
// 最小公倍数:lcm=m*n/gcd;
int lcm(int m, int n)
{
if (m*n==0) return 0;
int gcd_num = gcd(m, n);
if (gcd_num>=1)
return (m*n/gcd_num);
}
相关复杂度讨论可以参考ACM数论专题1——gcd与lcm https://codeantenna.com/a/raQ447c1CC
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· .NET10 - 预览版1新功能体验(一)