1.暴力法:遍历公约数求出最大者
// 方法1:遍历法
// 参考:https://blog.youkuaiyun.com/qq_41575507/article/details/90752742
int max_ComNum_method1(int a, int b)
{
int min;
int result;
int i = 1;
min = a <= b ? a : b;
while(i < min)
{
if(a%i==0 && b%i==0)
{
result = i;
}
i++;
}
return i;
}
2.辗转相除法
例子:64%12=4;12%4=1;4%1=0,最大公约数是4
// 方法2:转转相除法
int max_ComNum_method2(int a, int b)
{
int rest;
while (b > 0)
{
rest = a % b;
a = b;
b = rest;
}
return a;
}
3.更相减损术
例子:64-12=52;52-12=40;40-12=28;28-12=16;16-12=4,最大公约数是4
// 方法3:更相减损术
int max_ComNum_method3(int a, int b)
{
int dec;
while (b > 0)
{
dec = abs(a - b);
a = b;
b = dec;
}
return a;
}
4.辗转相除的递归解法
// 方法4:递归
int max_ComNum_method4(int a, int b)
{
if (b == 0) return a;
return max_ComNum_method4(b, a % b); // 递归
}