文章

19

粉丝

67

获赞

29

访问

11.9k

头像
求n个数两两之间的LCM
P3684
发布于2023年8月7日 10:55
阅读数 542

利用最小公倍数和最大公约数之间的关系。

我们可以利用如下的性质来计算 n 个数的最小公倍数:

LCM(a, b, c) = LCM(LCM(a, b), c)

也就是说,n 个数的最小公倍数等于先计算前两个数的最小公倍数,然后再将得到的最小公倍数与下一个数计算最小公倍数,依次类推,直到计算完所有的数。

同时,利用最大公约数的性质来简化计算过程:

LCM(a, b) = a * b / GCD(a, b)

因此,只需要求出 n 个数两两之间的最小公倍数,然后再继续求最小公倍数,直到得到最终结果

#include <bits/stdc++.h>

using namespace std;

int gcd(int a, int b)
{
    if (b == 0)
    {
        return a;
    }
    else
    {
        return gcd(b, a % b);
    }
}

int lcm(int a, int b)
{
    return a * b / gcd(a, b);
}

int lcmofN(vector<int> vec, int n)
{
    int result = vec[0];
    for (int i = 1; i < n; i++)
    {
        result = lcm(result, vec[i]);
    }
    return result;
}

int main()
{
    int n;
    while (cin >> n)
    {
        vector<int> vec(n);
        for (int i = 0; i < n; i++)
        {
            cin >> vec[i];
        }
        int result = lcmofN(vec, n);
        cout << result << endl;
    }
...
登录查看完整内容


登录后发布评论

暂无评论,来抢沙发