欧几里得算法又称辗转相除法,适用于两个非负整数a,b的最大公约数。
原理
两个整数的最大公约数等于其中较小的数和两数相除余数的最大公约数
ex:
需要求1997和615两个正整数的最大公约数,用欧几里得算法:
1997/615==3(余152)
615/152==4(余7)
152/7==21(余5)
7/5==1(余2)
5/2==2(余1)
2/1==2(余0)
至此,最大公约数为1;以除数和余数反复做除法运算,当余数为0时,取当前算式除数为最大公约数,所以得出1997和615的最大公约数为1。
资料来自百度百科
很明显,这个计算过程可以使用函数的递归来实现
下面给出代码
//求解a,b的最大公约数
int gub(int a,int b)
{
int max;
int min;
if(a>b)//对a,b的大小进行比较
{
max=a;
min=b;
}
else
{
max=b;
min=a;
}
int z=max%min;
if(z==0)
return min;//确定递归的终止条件
else
return gub(min,z);//递归
}
当然为了更加严谨,可以再加一个if语句来判断a,b是否为非负整数;
以上就是欧几里得算法实现求解最大公约数;
欢迎评论区讨论,感谢大佬指点