题目的主要信息:

  • 编写一个方法,该方法的返回值是两个不大于100的正整数的最小公倍数

具体做法:

首先我们要知道的一个知识:最小公倍数=两数相乘/两数的最大公约数,因为在两数乘积中最大公约数是多余的部分,可以约掉,使公倍数更小,约到最小就是除掉最大公约数。

而求最大公约数,我们可以用更相减损法,性质:两个数的最大公约数等于它们中较小的数和两数之差的最大公约数。 图片说明

用循环模拟上述过程即可以得到最大公约数,然后用两数乘积除以最大公约数得到最小公倍数。

import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner console = new Scanner(System.in);
        int m = console.nextInt();
        int n = console.nextInt();
        int result = getCM(m, n);
        System.out.println(result);
    }
    
    public static int gcd(int a, int b) { //更相减损法找最大公约数
        int temp = Math.abs(a - b); //取差的绝对值 
        while(temp != 0) //不断减去差的绝对值直到为0
        {   
            a = b;
            b = temp;
            temp = Math.abs(a - b);
        }
        return b;
    }
    
    public static int getCM(int m, int n){
        return m * n / (gcd(m, n)); //两数乘积除以最大公约数
    }
}

复杂度分析:

  • 时间复杂度:最坏情况为O(max(m,n))O(max(m,n)),最坏一个一个减,全部减完
  • 空间复杂度:O(1)O(1),无额外空间