我知道Euclid算法是获取正整数列表的GCD(最大公约数)的最佳算法。但是实际上,您可以通过多种方式对该算法进行编码。(就我而言,我决定使用Java,但C / C ++可能是另一种选择)。
我需要在程序中使用最高效的代码。
在递归模式下,您可以编写:
static long gcd (long a, long b){
a = Math.abs(a); b = Math.abs(b);
return (b==0) ? a : gcd(b, a%b);
}
在迭代模式下,它看起来像这样:
static long gcd (long a, long b) {
long r, i;
while(b!=0){
r = a % b;
a = b;
b = r;
}
return a;
}
GCD还有二进制算法,可以这样简单地编码:
int gcd (int a, int b)
{
while(b) b ^= a ^= b ^= a %= b;
return a;
}