Euclid'in algoritmasının, GCD'yi (büyük ortak bölen) bir pozitif tamsayı listesinden almak için en iyi algoritma olduğunu biliyorum. Ancak pratikte bu algoritmayı çeşitli şekillerde kodlayabilirsiniz. (Benim durumumda Java kullanmaya karar verdim, fakat C / C ++ başka bir seçenek olabilir).
Programımda mümkün olan en verimli kodu kullanmam gerekiyor.
Özyinelemeli modda, şunları yazabilirsiniz:
static long gcd (long a, long b){
a = Math.abs(a); b = Math.abs(b);
return (b==0) ? a : gcd(b, a%b);
}
Yinelemeli modda şöyle görünür:
static long gcd (long a, long b) {
long r, i;
while(b!=0){
r = a % b;
a = b;
b = r;
}
return a;
}
GCD için basitçe şöyle kodlanabilecek İkili algoritma da vardır:
int gcd (int a, int b)
{
while(b) b ^= a ^= b ^= a %= b;
return a;
}