题目的主要信息:
- 编写一个方法,该方法的返回值是两个不大于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)); //两数乘积除以最大公约数
}
}
复杂度分析:
- 时间复杂度:最坏情况为,最坏一个一个减,全部减完
- 空间复杂度:,无额外空间