简介
网上有很多计算最大公约数和最小公倍数的算法,这里凑个热闹。
最大公约数
思路:
- 最大公约数肯定不会比最小的数大
- 找寻最大的公约数可以从大到小猜测假设
- 加入异常处理
Code如下:
private int maxDecideNumber(int a, int b) {
if(a == 0 || b == 0){
return 0;
}
int min = Math.min(a, b);
for (int i = min; i > 0; i--) {
if (a % i == 0 && b % i == 0) {
return i;
}
}
return 1;
}
最小公倍数
思路一:
- 最小公倍数肯定比大于等于最大的数
- 最小公倍数肯定小于等于这两个数值的乘积
- 如果数值大的值可以直接整除小的数值,那大的数值就是最小公倍数
- 加入异常处理
Code
private int minMultipleNumber(int a, int b) {
if (a == 0 || b == 0) {
return 0;
}
int max = Math.max(a, b);
int min = Math.min(a, b);
if(max % min ==0){
return max;
}
int maxlen = a*b;
for(int i= max; i<= maxlen; i++) {
if (i % a == 0 && i % b == 0) {
return i;
}
}
return maxlen;
}
思路二:
依据公式法,由于两个数的乘积等于这两个数的最大公约数与最小公倍数的积。即(a,b)×[a,b]=a×b。
所以,求两个数的最小公倍数,就可以先求出它们的最大公约数,然后用上述公式求出它们的最小公倍数。
Code
private int minMultipleNumber2(int a, int b) {
if (a == 0 || b == 0) {
return 0;
}
return a*b / maxDecideNumber(a,b);
}