如何在一组数字上找到GCD,LCM

2022-08-31 13:44:32

计算一组数字的最大公约数和最小公倍数的最简单方法是什么?可以使用哪些数学函数来查找此信息?


答案 1

我使用欧几里得的算法来找到两个数字的最大公约数;可以迭代它以获得更大数字集的GCD。

private static long gcd(long a, long b)
{
    while (b > 0)
    {
        long temp = b;
        b = a % b; // % is remainder
        a = temp;
    }
    return a;
}

private static long gcd(long[] input)
{
    long result = input[0];
    for(int i = 1; i < input.length; i++) result = gcd(result, input[i]);
    return result;
}

最小公倍数有点棘手,但最好的方法可能是通过GCD进行减少,这可以类似地迭代:

private static long lcm(long a, long b)
{
    return a * (b / gcd(a, b));
}

private static long lcm(long[] input)
{
    long result = input[0];
    for(int i = 1; i < input.length; i++) result = lcm(result, input[i]);
    return result;
}

答案 2

GCD有一个欧几里得算法

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

顺便说一句,应该更大或等于,和LCMab0 = |ab| / GCF(a, b)