【原理】
对于正整数a和b的最大公约数x,必然存在:
a%x==0
b%x==0
可推出,双方差值也能整除x
(a-b)%x==0
因此,使用两数中较大的一个减去小的一个,得到的差值放入较大的变量,再重复上面的运算,直到其中一个为0,另一个必然就是要求的x
变量存储值的典型变化如下(a和b的值大小关系为假设,实际代码中可以用判断交换两者的值,或者用指针确定大小关系):
变量a 变量b
a b
a-b b
a-b b-(a-b)
......
0 x
【C语言实现】
/***************************************************
函数功能:求两整数的最大公约数
函数入参:a - 一个整数
b - 一个整数
函数出参:
返回值 :求出的最大公约数,若两数中一个为0则返回0
其他说明:
***************************************************/
unsigned int GetBCD(unsigned int a, unsigned int b)
{
if (0 == a || 0 == b)
{
return 0;
}
while(a && b)
{
if (a > b)
{
a -= b;
}
else
{
b -= a;
}
}
return a?a:b;
}