Tôi biết rằng thuật toán của Euclid là thuật toán tốt nhất để có được GCD (ước số chung lớn) của danh sách các số nguyên dương. Nhưng trong thực tế, bạn có thể mã hóa thuật toán này theo nhiều cách khác nhau. (Trong trường hợp của tôi, tôi đã quyết định sử dụng Java, nhưng C / C ++ có thể là một tùy chọn khác).
Tôi cần sử dụng mã hiệu quả nhất có thể trong chương trình của mình.
Trong chế độ đệ quy, bạn có thể viết:
static long gcd (long a, long b){
a = Math.abs(a); b = Math.abs(b);
return (b==0) ? a : gcd(b, a%b);
}
Và trong chế độ lặp, nó trông như thế này:
static long gcd (long a, long b) {
long r, i;
while(b!=0){
r = a % b;
a = b;
b = r;
}
return a;
}
Ngoài ra còn có thuật toán nhị phân cho GCD, có thể được mã hóa đơn giản như thế này:
int gcd (int a, int b)
{
while(b) b ^= a ^= b ^= a %= b;
return a;
}