求解最大公约数依据如下定理:gcd(a,b) = gcd(b,a mod b) (不妨设a>b 且r=a mod b ,r不为0);
两个整数的最大公约数等于其中较小的那个数和两数相除余数的最大公约数。
代码:
非递归算法:
int gcd(int a,int b)
{
int c;
while(b>0)
{
c=a%b;//a,b不用区分大小,如果a<b的话,程序就先进行a,b值的交换,从而使a>b。
a=b;
b=c;
}
return b;
}
递归算法:
int gcd(int a,int b)
{
return b==0?a:gcd(b, a%b);
}