Java LCM计算

Java LCM计算,java,biginteger,greatest-common-divisor,lcm,Java,Biginteger,Greatest Common Divisor,Lcm,我为spoj中给出的问题编写了代码来计算LCM。我计算了2个数字的gcd,将2个数字的乘法除以gcd,得到了2个数字的lcm,但它给出了错误的答案 问题就在这里 import java.math.biginger; 导入java.util.Scanner; Lcm1类{ 公共静态void main(字符串args[])抛出可丢弃的{ 试一试{ 扫描仪s=新的扫描仪(System.in); int siz=s.nextInt(); 对于(int i=0;i

我为spoj中给出的问题编写了代码来计算LCM。我计算了2个数字的gcd,将2个数字的乘法除以gcd,得到了2个数字的lcm,但它给出了错误的答案

问题就在这里

import java.math.biginger;
导入java.util.Scanner;
Lcm1类{
公共静态void main(字符串args[])抛出可丢弃的{
试一试{
扫描仪s=新的扫描仪(System.in);
int siz=s.nextInt();
对于(int i=0;i
您的逻辑部分错误。基本上,您只是计算给定数字的lcm,但用户要求找到满足给定条件的最小k。但您的逻辑不是最小k。 尝试n=340和m=230的情况,实际ans为1564,但代码给出7820

注:lcm并不总是问题中满足给定条件的最小k


提示:对m,n进行素数分解,然后尝试得到ans…再尝试几个例子,您就会得到它。

为什么要使用multiply()和divide()方法?与*和/相比,这似乎毫无意义。你还应该发布你的gcd()方法,可能有问题。到目前为止,这看起来还不错,你能给出一个错误结果的例子吗?@Rishub我们不能使用*和/用于BigInteger@Marco13我也不知道…当我提交代码时,这表明它是错误的。似乎到目前为止,还没有为这个问题提供公认的Java解决方案。只是说,谁知道他们是如何测试它的。。。
import java.math.BigInteger;
import java.util.Scanner;

class Lcm1 {
    public static void main(String args[]) throws Throwable {
        try {
            Scanner s = new Scanner(System.in);
            int siz = s.nextInt();
            for(int i = 0; i< siz; i++) {
                BigInteger a = s.nextBigInteger(), b = s.nextBigInteger();
                System.out.println((a.multiply(b)).divide(a.gcd(b)));
            }
        }
        catch(Exception e){}
    }
}