当前位置:首页C++ > 正文

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
野牛程序员教少儿编程与信息学竞赛-微信|电话:15892516892
  • c++多个数 GCD + LCM 程序
  • 相关推荐

    最新推荐

    热门点击