欧几里得算法,思路如下:
如果给两个整数x,y。假设在x>y的情况下:
x%y=b
代表的是x除以y的余数是b
假设它们的最大公约数是r,x是r的整数倍,y也是r的整数倍,那么:
b要么是0,代表y是两者的最大公约数,要么就是r的整数倍,而且b还比y小
那么就可以让问题简化,所以 方法:
fb(x,y)=fb(y,x%y) (x>=y)
直到b也就是x%y为0时,求出最大公约数。
代码如下:
int fb(int x, int y)
{
if (x == 0 || y == 0) //排除x,y都为0的情况
return 0;
if (x < y) //确保x是较大的那个
{
int temp;
temp = y;
y = x;
x = temp;
}
if (x%y == 0) //算法主体
return y;
else
return fb(y,x%y);
}