最大公因数(GCD)与最小公倍数(LCM)的概念
最大公因数(Greatest Common Divisor,GCD)指两个或多个整数共有的最大正整数因数。最小公倍数(Least Common Multiple,LCM)则是能够被这些整数整除的最小正整数。两者关系为:
\\text{LCM}(a, b) = \\frac{\|a \\times b\|}{\\text{GCD}(a, b)}
C++ 实现方法
欧几里得算法(递归法)计算 GCD
通过递归方式求解,基于数学原理:
\\text{GCD}(a, b) = \\text{GCD}(b, a % b) 代码示例:
cpp
int gcd(int a, int b) {
if (b == 0) return a;
return gcd(b, a % b);
}
迭代法计算 GCD
避免递归开销的迭代实现:
cpp
int gcd(int a, int b) {
while (b != 0) {
int temp = b;
b = a % b;
a = temp;
}
return a;
}
计算 LCM
利用 GCD 结果推导 LCM:
cpp
int lcm(int a, int b) {
return abs(a * b) / gcd(a, b);
}
标准库函数
C++17 起可直接使用 <numeric> 中的 std::gcd 和 std::lcm:
cpp
#include <numeric>
int gcd_val = std::gcd(a, b);
int lcm_val = std::lcm(a, b);
注意事项
- 输入为负数时,需转换为绝对值处理或依赖库函数自动处理。
- 大整数运算时需考虑使用
long long类型避免溢出。