Я знаю, что алгоритм Евклида - лучший алгоритм для получения 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;
}