对于非负整数a,b,求a和b的最大公约数,设a>=b>=0.
辗转相除法
- 若b=0,则a和b的最大公约数为a;
- 若b>0,则a和b的最大公约数 等于 b和a除以b的余数的最大公约数。
public static void main(String[] args) {
int a = 30;
int b = 90;
if (a < b) {//保证a大于b
int tmp = b;
b = a;
a = tmp;
}
int result = function1(a,b);
System.out.println(result);
int result2 = function2(a, b);
System.out.println(result2);
}
private static int function2(int a, int b) {//辗转相除法
if(b == 0)
return a;
else
return function2(b, a%b);
}
穷举法:
思想:
public static void main(String[] args) {
int a = 3;
int b = 20;
if (a < b) {//保证a大于b
int tmp = b;
b = a;
a = tmp;
}
int result = function1(a,b);
System.out.println(result);
}
private static int function1(int a, int b) {
int i;
for (i = b; i > b/2; i--) {//若最大公约数不为1,则一定是b的2倍以上
if (a%i==0 && b%i == 0)
break;
}
if (i == b/2 ) {//大于等于2的公约数不存在,最大公约数为1
i = 1;
}
return i;
}