int GCD(int a, int b) {
int d = 1;
for (int i = 2; i <= std::min(a, b); ++i) {
if (0 == a % i && 0 == b % i) {
d = i;
}
}
return d;
}
int GCD(int a, int b) {
int d = min(a, b);
for (; d > 1; --d) {
if (0 == a % d && 0 == b % d) {
return d;
}
}
return 1;
}
輾轉消除法
int GCD(int a, int b) {
if (a < b) {
return GCD(b, a);
}
int r = a % b;
if (r == 0) {
return b;
} else {
return GCD(b, r);
}
}
int GCD(int a, int b) {
if (a % b == 0) {
return b;
} else {
return GCD(b, a % b);
}
}
int GCD(int a, int b) {
return (b == 0) ? a : GCD(b, a % b);
}
非遞迴版本
int GCD(int a, int b) {
while (b > 0) {
int r = a % b;
a = b;
b = r;
}
return a;
}
Reference
https://coherence0815.wordpress.com/2015/05/02/greatest-common-divisor-gcd-in-c/