欧几里得算法能够求出两个数值的最大公约数。此算法的确立虽然已经过去2000多年,但因其实现逻辑简单又明确,所以至今还在沿用。具体内容如下。
给出两个任意自然数 m 和 n ,为了便于说明,假设 m 总是大于等于 n 。即使如此假设也不会失去算法的通用性,因为必要时可以将 m 和 n 对调。此时,求 m 和 n 的最大公约数。
int gcd(int m, int n)
{
int r = 0;
if (n > m)
{
swap(m, n); // 对调 m 和 n,保证假设成立
}
while (n > 0)
{
r = m % n;
m = n;
n = r;
}
return m;
}
可通过求两个自然数 582 和 129 的最大公约数来验证算法。答案:最大公约数为 3。