📜  两个大正整数的lcm java(1)

📅  最后修改于: 2023-12-03 15:21:33.186000             🧑  作者: Mango

两个大正整数的lcm(Java)

本篇文章将介绍如何使用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类来处理大数字计算,同时使用了辗转相除法来求解最大公约数。