找到n个数字的gcd的最快方法是什么?

The*_*elf 39 algorithm math greatest-common-divisor

计算n个数的最大公约数的最快方法是什么?

dog*_*ane 19

没有递归:

int result = numbers[0];
for(int i = 1; i < numbers.length; i++){
    result = gcd(result, numbers[i]);
}
return result;
Run Code Online (Sandbox Code Playgroud)

对于非常大的数组,使用fork-join模式可能会更快,您可以在其中拆分数组并并行计算gcds.这是一些伪代码:

int calculateGCD(int[] numbers){
    if(numbers.length <= 2){
        return gcd(numbers);    
    }
    else {
        INVOKE-IN-PARALLEL {
            left = calculateGCD(extractLeftHalf(numbers));
            right = calculateGCD(extractRightHalf(numbers));
        }
        return gcd(left,right);
    }
}
Run Code Online (Sandbox Code Playgroud)


lhf*_*lhf 15

您可能希望先对数字进行排序,然后从最小的两个数字开始递归计算gcd.