问题描述
从键盘输入M、N(M、N取值长整范围)两个数,求它们的最小公倍数。
输入格式
输入文件只有一行,有两数被空格隔开,分别表示M、N的值。
输出格式
只有一个数,即M、N的最小公倍数。
样例输入
15 20
样例输出
60
思路:求最小公倍数可以先求其最大公约数,再用两数的乘积除以其最大公约数即可。
原文出自这位大佬的C++:http://www.luyixian.cn/news_show_317121.aspx
吐槽:本来很简单的一道题目,结果后边的最后一条测试数据的输出结果是上亿的,然后我就一直在想办法优化代码,找到了大佬的C++代码后,模仿出的JAVA代码。其实有时候能优化自身代码还是要优化的,不然容易被淘汰,泪目=.=#
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
long m = scanner.nextLong();
long n = scanner.nextLong();
scanner.close();
for (long i = Math.min(m, n); i > 0; i--) { // 利用min找到最小数,倒序枚举
if (m % i == 0 && n % i == 0) { // 得出最大公约数
System.out.println((m * n) / i); // 俩数积相乘/最大公约数=最小公倍数
break;
}
}
}
}