欧几里得算法用于求解两个正整数的最大公约数 (Great Common Divisor),其理论依据为:
GCD (a, b) = GCD (b, a mod b), { a , b : N | a > b ^ a mod b != 0 }。
以下为C 代码:
// 迭代
int gcd (int _a, int _b) {
int rem = 0;
while (_b > 0) {
rem = _a % _b;
_a = _b;
_b = rem;
}
return _a;
}
// 递归
int gcd (int _a, int _b) {
if (! _b) return _a;
return gcd (_b, _a % _b);
}
证明方法:
a, b : N => a = kb + r ^ r = a mod b
假设 ∃m : N => a | m ^ b | m, 又有 r = a - kb => r | m
∴ m 为 a, b, a mod b 的公约数,也即是 b 和 a mod b 的公约数,
如此继续下去,直到a mod b 为 0 时,则此时b 为最大公约数。