题解 | #最大公约数#
最大公约数
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; }