最大公约数之“四大天王”算法
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++;