欧几里德算法用于求两个正整数m和n的最大公因子,即能同时整除m和n的最大正整数。
欧几里德算法描述如下:以n除m并令r为所得余数,若r = 0,算法结束,n即为答案,否则置m = n,n = r,再让n除m,直到余数为0。
c语言实现代码如下:
unsigned int gcd(unsigned int m, unsigned int n)
{
unsigned int tmp;
while (n) {
tmp = n;
n = m % n;
m = tmp;
}
return m;
}
上面算法还可以改进一下,如果m小于n,总是会先交换m和n的值,改进后的算法如下:
unsigned int gcd(unsigned int m, unsigned int n)
{
unsigned int tmp;
if (m < n) {
tmp = n;
n = m;
m = tmp;
}
while (n) {
tmp = n;
n = m % n;
m = tmp;
}
return m;
}