一组超过2个整数的最大公约数

BG1*_*100 15 c# algorithm math

Stack Overflow上有几个问题讨论如何找到两个值的最大公约数.一个好的答案显示了一个简洁的递归函数来做到这一点.

但是如何找到一组超过2个整数的GCD?我似乎无法找到这样的例子.


任何人都可以建议最有效的代码来实现这个功能吗?

static int GCD(int[] IntegerSet)
{
    // what goes here?
}
Run Code Online (Sandbox Code Playgroud)

Mar*_*náš 47

在这里你有代码示例使用LINQ和GCD方法来链接你的问题.它正在使用其他答案中描述的理论算法......GCD(a, b, c) = GCD(GCD(a, b), c)

static int GCD(int[] numbers)
{
    return numbers.Aggregate(GCD);
}

static int GCD(int a, int b)
{
    return b == 0 ? a : GCD(b, a % b);
}
Run Code Online (Sandbox Code Playgroud)


Dar*_*rov 13

您可以使用GCD的这个公共属性:

GCD(a, b, c) = GCD(a, GCD(b, c)) = GCD(GCD(a, b), c) = GCD(GCD(a, c), b)
Run Code Online (Sandbox Code Playgroud)

假设您GCD(a, b)已经定义了很容易概括:

public class Program
{
    static void Main()
    {
        Console.WriteLine(GCD(new[] { 10, 15, 30, 45 }));
    }

    static int GCD(int a, int b)
    {
        return b == 0 ? a : GCD(b, a % b);
    }

    static int GCD(int[] integerSet)
    {
        return integerSet.Aggregate(GCD);
    }    
}
Run Code Online (Sandbox Code Playgroud)