最大公约数之“四大天王”算法
1.辗转相除法
2.穷举法
3.更相减损法
4.Stein算法
算法一 辗转相除法
算法过程:前提:设两数为a,b设其中a 做被除数,b做除数,temp为余数
(1)大数放a中、小数放b中;
(2)求a/b的余数;
(3)若temp=0则b为最大公约数;
(4)如果temp!=0则把b的值给a、temp的值给a;
(5)返回第二步;
//辗转相除法
public int divisor1(int a,int b){
int temp;
if(a < b){
temp = a;
a = b;
b = temp;
}
while(b != 0){
temp = a%b;
a = b;
b = temp;
}
return a;
}
流程图在下吧,受我一拜

算法二 穷举法
算法过程:前提:设两数为a,b。其中,a为较大值,b为较小值
(1)两个数中较小数开始由大到小列举;
(2)直到找到公约数立即中断列举;
(3)即得到的公约数便是最大公约数;
//穷举法
public int divisor2(int a,int b){
int temp = a<b?a:b;
while(temp > 0){
if(a%temp==0 && b%temp==0){
break;
}
temp--;
}
return temp;
}
流程图在下吧,受我一拜

算法三 更相减损法
算法过程:
(1)任意给定两个正整数;判断它们是否都是偶数。若是,则用2约简;若不是则执行第二步;
(2)以较大的数减较小的数,接着把所得的差与较小的数比较,并以大数减小数。继续这个操作,直到所得的减数和差相等为止。
(3)则第一步中约掉的若干个2与第二步中等数的乘积就是所求的最大公约数。
//更相减损法
public int divisor3(int a,int b){
int temp;
int count = 0;
while(a%2==0 && b%2==0){
a /= 2;
b /= 2;
count++;

本文介绍了四种最大公约数算法:辗转相除法、穷举法、更相减损法和Stein算法,并探讨了如何生成随机数据以及计算平均运行时间。通过不同数据规模的测试,强调在面对大规模数据时,应选择运行时间更优的算法。同时,作者反思了代码重复的问题,期待读者提供改进意见。
最低0.47元/天 解锁文章
6056

被折叠的 条评论
为什么被折叠?



