Я знаю, що алгоритм Евкліда є найкращим алгоритмом отримання 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;
}