一、题目
输入描述:
输入两个正整数A和B。
输出描述:
输出A和B的最小公倍数。
示例1
输入:
5 7
输出:
35
示例2
输入:
2 4
输出:
4
二、思路解析
这道题,也是模拟实现这一大类的一题。
在笔试面试,一般是不会出现 最小公倍数 这么简单的题的,出现的时候,大都是作为一道编程题的其中一步。
那好,回到题目上来,希望各位看完我这篇博客,能建立一个认知:一看见最大公约数,就要想起 “辗转相除法”。
我一年多以前,也写过一篇辗转相除法的博客。
自认为讲得还算挺细的,也是我阅读量最高的几篇博客之一,想做这道题的朋友们建议都去看看👇
详解“辗转相除法”(如何求最大公约数)http://t.csdnimg.cn/Vsg8G
在这道题,我们求的是最小公倍数,那到底和最大公约数,还有辗转相除法,是什么关系呢?
这里就要引出一条公式了:
lcm(a, b) = a * b / gcd(a, b)
其中,lcm(a, b) 是求 a 和 b 的最小公倍数,而 gcd(a, b) 则是求 a 和 b 的最大公约数。
因为最大公约数就是,两个数的所有相同质数相乘的结果;而最小公倍数就是扣除一次所有相同的质数。
想要求最小公约数的两个数 a 、b 相乘,然后除以最大公约数,一来一回刚好抵消,结果就刚好是最小公倍数。
好,那么 gcd(a, b) 又该如何求呢?
gcd 不是最大公约数嘛,那这时候就用到我们的 “辗转相除法了”,所以就有了这条公式:
gcd(a, b) = gcd(b, a % b)
以上,就是这道题的解题思路了,具体实现请看下面代码👇
三、完整代码
import java.util.Scanner;
public class Main {
public static int gcd(int a, int b){
if(b == 0){
return a;
}
return gcd(b, a % b);
}
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int a = in.nextInt();
int b = in.nextInt();
System.out.println(a * b / gcd(a,b));
}
}
以上就是本篇博客的全部内容啦,如有不足之处,还请各位指出,期待能和各位一起进步!