📅  最后修改于: 2023-12-03 15:21:33.186000             🧑  作者: Mango
本篇文章将介绍如何使用Java编程语言来求解两个大正整数的最小公倍数(Least Common Multiple,简称LCM)。最小公倍数是指在若干个正整数中,共有的倍数中最小的那一个,又称最小公倍数。
对于两个正整数a和b,它们的最小公倍数可以通过它们的乘积除以它们的最大公约数(GCD)来得到,即: LCM(a, b) = a * b / GCD(a, b)
首先我们需要实现一个辗转相除获取最大公约数的函数:
public static long gcd(long a, long b) {
if (a < 0 || b < 0) {
throw new IllegalArgumentException("a和b必须是正整数");
}
if (a == 0) {
return b;
}
if (b == 0) {
return a;
}
long larger = a > b ? a : b;
long smaller = a > b ? b : a;
return gcd(smaller, larger % smaller);
}
然后我们只需要编写一个获取两个大正整数的LCM的函数即可:
public static BigInteger lcm(BigInteger a, BigInteger b) {
if (a == null || b == null) {
throw new IllegalArgumentException("a和b不能为空");
}
if (a.signum() == 0 || b.signum() == 0) {
return BigInteger.ZERO;
}
BigInteger gcd = a.gcd(b);
if (gcd.equals(BigInteger.ZERO)) {
return BigInteger.ZERO;
}
return a.multiply(b).divide(gcd);
}
下面是一个使用示例:
BigInteger a = new BigInteger("123456789");
BigInteger b = new BigInteger("987654321");
BigInteger lcm = lcm(a, b);
System.out.println(lcm);
运行结果为:
12193263113702109
本篇文章介绍了如何使用Java编程语言来求解两个大正整数的LCM。在实现时,我们使用了BigInteger类来处理大数字计算,同时使用了辗转相除法来求解最大公约数。