c++多个数 GCD + LCM 程序
作者:野牛程序员:2025-11-10 07:27:26C++阅读 2201
c++多个数 GCD + LCM 程序
多个数求 GCD & LCM
当只给一对整数时可直接用 gcd(a,b) 与 lcm(a,b)。
若给多个整数,则可以利用 结合律:
gcd(a, b, c) = gcd(gcd(a, b), c)
lcm(a, b, c) = lcm(lcm(a, b), c)
#include <iostream>
#include <vector>
using namespace std;
/*
----------------------------------------------------
函数:gcd(a, b)
功能:求最大公约数
方式:欧几里得算法(非递归版本)
----------------------------------------------------
*/
int gcd(int a, int b) {
while (b != 0) {
int t = a % b; // 求余
a = b; // 交换
b = t;
}
return a; // b = 0 时 a 即为 gcd
}
/*
----------------------------------------------------
函数:lcm(a, b)
功能:求最小公倍数
公式:lcm(a, b) = a / gcd(a, b) * b
----------------------------------------------------
*/
int lcm(int a, int b) {
return a / gcd(a, b) * b;
}
int main() {
int n;
cin >> n; // 输入数量
vector<int> arr(n);
for (int i = 0; i < n; i++)
cin >> arr[i]; // 输入多个整数
// 计算多个数的 GCD
int g = arr[0];
for (int i = 1; i < n; i++)
g = gcd(g, arr[i]);
// 计算多个数的 LCM
int L = arr[0];
for (int i = 1; i < n; i++)
L = lcm(L, arr[i]); // 依次合并
cout << "GCD = " << g << "\n";
cout << "LCM = " << L << "\n";
return 0;
}✅ 输入样例
4 12 8 6 18
✅ 输出样例
GCD = 2LCM = 72
解释:
gcd(12,8,6,18) = 2
lcm(12,8,6,18) = 72
✅ 注意事项
| 项目 | 是否特别注意 |
|---|---|
| gcd 输入允许负数 -> 返回非负 | ✅ |
| lcm 需先除后乘避免溢出 | ✅ |
| 多数 lcm 可能非常大 | ⚠️ |
| vector / for 易扩展 | ✅ |
若 n 很大 或 数很大 可能溢出,可使用
long long或__int128
如需,可提供 高精度 LCM / GCD
野牛程序员教少儿编程与信息学奥赛-微信|电话:15892516892

