算法训练 5-1最小公倍数
时间限制:1.0s 内存限制:256.0MB
问题描述
编写一函数lcm,求两个正整数的最小公倍数。
样例输入
一个满足题目要求的输入范例。
例:
3 5
例:
3 5
样例输出
与上面的样例输入对应的输出。
例:

例:

数据规模和约定
输入数据中每一个数的范围。
例:两个数都小于65536。
例:两个数都小于65536。
当我看到这道题的时候,我的第一反应是能不能用欧几里德算法求最小公倍数呢?
然后我在网上查了一下,发现了最大公约数和最小公倍数的关系,这让我很是高兴嘻嘻(●'◡'●)
我们来看推导:
两个数的乘积正好等于这两个数的最大公约数与最小公倍数的乘积!!!
分析:假设两个数为a,b,他们的最大公约数是a/c
那么他们的最小公倍数就是(a/c)*a/(a/c)*b/(a/c)
化简之后就是b*c
所以最大公约数乘以最小公倍数=(a/c)*(b*c)=a*b
所以最小公倍数就可以用a和b的乘积除以最大公约数啦啦~
import java.util.*;
public class Main{
//欧几里德算法求最大公约数
public static int divisor(int a,int b)
{
if(a%b==0)
{
return b;
}
else
{
return divisor(b,a%b);
}
}
public static void main(String[] args)
{
Scanner sc=new Scanner(System.in);
int a=sc.nextInt();
int b=sc.nextInt();
sc.close();
//a*b=最大公约数*最小公倍数
System.out.println(a*b/divisor(a,b));
}
}