方法一:循环
//通过从m开始,依次递减,找到同时能被m和n整除的最大数
int gcd(int m, int n)
{
for(i=m;i>=1;i--)
{
if(m%i==0 && n%i==0)
break;
}
return 0;
}
方法二:递归
使用递归是基于欧几里得算法(辗转相除法)的思想,它可以大大减少循环的次数。
int gcd(int a, int b)
{
if (b == 0) {
return a;
}
return gcd(b, a % b);
}
这个版本的gcd函数递归地调用自身,每次调用时都将较小的数作为新的b,将a除以b的余数作为新的a,直到b为0时返回a作为最大公约数。这种方法效率更高,因为它避免了不必要的迭代,并且利用了整除的性质来快速找到最大公约数。
当然,这个递归的方式可以改成迭代循环,如下:
int gcd(int a,int b)
{
if(a < b){
int temp = a;
a = b;
b = temp;
}
while(b!=0){
int temp = b;
b = a % b;
a = temp;
}
return temp;
}