辗转相除法
辗转相除法又名欧几里得算法(Euclidean algorithm),目的是求出两个正整数的最大公约数。
这条算法基于一个定理:两个正整数 a 和 b(a 大于 b),它们的最大公约数等于 a 除以 b 的余数 c 和 较小数 b 之间的最大公约数。
算法计算过程是这样的:
- 2个数相除,得出余数
- 如果余数不为0,则拿较小的数与余数继续相除,判断新的余数是否为0
- 如果余数为0,则最大公约数就是本次相除中较小的数。
代码实现
public static int method(int a, int b) {
int max,min,t;
max = Math.max(a,b);
min = Math.min(a,b);
if (max % min == 0) return min;
t = max % min;
while (t != 0) {
max = min;
min = t;
t = max % min;
}
return min;
}
上面的代码是求最大公约数,如果所求的内容不止两个数,就先求出两个的最大公约数,然后用这个公约数与第三个继续求,每次求的时候加一个判断:如果最大公约数是1的话,后续的也不用求直接返回1即可。
最小公倍数就是两个数的乘积除以最大公约数。