题解 | #最大公约数#
最大公约数
http://www.nowcoder.com/practice/cf4091ca75ca47958182dae85369c82c
我不是欧几里得,他这个方法我真想不到;
public int gcb(int num1,num2){
//判断两个数直接相除是否等于0,等于0的话fan,返回较小的数,结束。
if(num1 >= num2 && (num1 % num2) == 0 ){
return num2;
}else if ((num2 > num1 ) && (num2 % num1) == 0){
return num1;
}
//tem表示最大公约数,如果两个数都是质数的话,那么最大公约数就是1
int temp = 1;
int lowNum,highNum;
if (num1 > num2){
highNum = num1;
lowNum = num2;
}else {
lowNum = num1;
highNum = num2;
}
//8=1*8 2*4 4*2,sqrt(8)=2.828,所以只要从1循环sqrt(lowNum)就可以把所有的因子找出来,
double j1 = Math.sqrt(lowNum);
int j = (int )j1;
for (int i = 1;i < j ;i++){
//寻找因子,
if ((lowNum % i) == 0 ){
//另一个因子 8%1=0,anotherNum = 8;
int anotherNum = lowNum / i;
if((highNum % i) == 0){
temp = i;
}else if ((highNum % anotherNum) == 0){
return anotherNum;
}
}
}
return temp;
}