Algorithm - 最大公约数和最小公倍数

Posted on By Vivian Sun

简介

网上有很多计算最大公约数和最小公倍数的算法,这里凑个热闹。

最大公约数

思路:

  1. 最大公约数肯定不会比最小的数大
  2. 找寻最大的公约数可以从大到小猜测假设
  3. 加入异常处理

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;
}

最小公倍数

思路一:

  1. 最小公倍数肯定比大于等于最大的数
  2. 最小公倍数肯定小于等于这两个数值的乘积
  3. 如果数值大的值可以直接整除小的数值,那大的数值就是最小公倍数
  4. 加入异常处理

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);
}