java - 如何在一组数字上找到 GCD、LCM

标签 java math greatest-common-divisor lcm

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

最佳答案

我用过Euclid's algorithm求两个数的最大公约数;可以通过迭代得到更大数字集的 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;
}

最小公倍数有点棘手,但最好的方法可能是reduction by the 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;
}

关于java - 如何在一组数字上找到 GCD、LCM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4201860/

相关文章:

php - 从 ids 数组生成唯一的固定整数 ids

python - Numpy gcd 函数

java - 欧几里得算法是如何工作的?

java - Java中接口(interface)实现的继承

Java InputStreamReader 无法读取特殊(土耳其语)字符

java - 从 Linux 64 位访问 javax.smartcardio

java - 如何告诉 visualvm 在哪里可以找到我的源代码?

algorithm - 将 48 位 key 散列为 16 位值

java部门: Inconvertible types found: int

algorithm - 大整数的 GCD 算法