总结一下:【求最大公因数的方法】
方法1:穷举法
//求最大公约数方法1:穷举法
private static int maxCommon1(int a,int b){
if(a<b){ //如果a<b,先把ab交换,方便以后操作
int tmp=a;
a=b;
b=tmp;
}
//如果b能直接整除a,说明b是它们的最大公约数
if(a%b==0){
return b;
}
//否则从小的开始依次整除,当a和b同时能整除那个数的时候说明就是它们的最大公约数
for(int i=b-1;i>1;i--){
if(a%i==0&&b%i==0){
return i;
}
}
return 1; //说明除完还没有找到,只能返回1
}
方法2:辗转相减法
//求最大公约数方法2:辗转相减法
/**两个数,相等时,最大公约数为他们其中任意一个。
不相等时,用大数减小数。得到的差和之前的那个小数再次相减,直到两个数相等,这两个中,任意一个都是最大公约数。
*/
private static int maxCommon2(int a,int b){
while((a-b)!=0){
if(a>b){
a=a-b;
}else {
b=b-a;
}
}
return b;
}
方法3:辗转相除法
//求最大公约数方法3:辗转相除法
/**
* 用大数对小数求余,若余数为0,则除数为最大公约数。
* 若余数不为0,将此余数作为除数,小数作为被除数,重新求余,直到余数为0为止。
* 此时的最大公约数为余数。例如:27和6. 27%6=3,6%3=0.所以最大公约数为3.
*/
private static int maxCommon3(int a,int b){
if(a<b){ //如果a<b,先把ab交换,方便以后操作
int tmp=a;
a=b;
b=tmp;
}
int n=a%b;
while(a%b!=0){
a=b;
b=n;
n=a%b;
}
return b;
}
}