题目
如果有一个自然数 a 能被自然数 b 整除,则称 a 为 b 的倍数, b 为 a 的约数。几个自然数公有的约数,叫做这几个自然数的公约数。公约数中最大的一个公约数,称为这几个自然数的最大公约数。
输入 a 和 b , 请返回 a 和 b 的最大公约数。
解题一
找到两个数最小的值,然后循环与a,b取余。
代码
public static int gcd (int a, int b) {
if (a%b==0||b%a==0){
return a>b?b:a;
}
int t = Math.min(a,b);
int ga=0;
for (int i = 1; i <=t; i++) {
if (a%i==0&&b%i==0){
ga=i;
}
}
return ga;
}
解题二
利用辗转相除法
代码
public static int gcd1 (int a, int b) {
if (a==0||b==0) {
return a==0?a:b;
}
if(a%b==0) {
return b;
}
return gcd1(b,a%b);
}