今天一次无意的思考中想起了最大公约数,想一下最大公约数的算法,第一反映是穷举,然后是短除,再
之后就想不到别的了,但是在模糊记忆中还应改有个别的,于是翻来覆去的想,忽然好像有个脚欧几里得
算法的东西,但具体内容全部和饭一起吃了,哎!google一下,发现果然是这个。实现方式
穷举
public static int getNumOne(int m,int n){
int num=Math.abs(m-n);
if (num > m){
num=m;
}
if(num >n){
num=n;
}
for(int i=num;i>0;i--){
if(m%i==0 && n%i==0){
num=i;
break;
}
}
return num;
}
欧几里得
public static int getNumTwo(int m,int n){
int num=1;
if(m>n){
num=getNumTwo(m-n,n);
}else if(m<n){
num=getNumTwo(n-m,m);
}else if(m==n){
num=n;
}
return num;
}
改进算法
public static int getNumThree(int m,int n){
int num=1;
while(num>0){
num=m%n;
m=n;
n=num;
}
return m;
}