【问题标题】:Largest Prime Factor using BigInteger Class使用 BigInteger 类的最大素因子
【发布时间】:2017-07-29 20:43:21
【问题描述】:
package Exercises;
import java.math.BigInteger;
public class LargestPrimeFactor {

    public static void main(String[] args) {
        BigInteger x = new BigInteger ("600851475143");
        BigInteger prime = new BigInteger ("0");

        for (BigInteger i = new BigInteger("2"); i.compareTo(x.divide(new BigInteger("2"))) < 1; i = i.add(new BigInteger("1")))
        {
            if (x.mod(i) == new BigInteger ("0"))
                if (isPrime(i))
                    prime = i;
        }
        System.out.println(prime);
    }

    public static boolean isPrime (BigInteger number)
    {
        for (BigInteger i = new BigInteger("2"); i.compareTo(number.divide(new BigInteger("2"))) < 1; i = i.add(new BigInteger("1")))
        {
            if (number.mod(i) == new BigInteger("0"))
                return false;
        }
        return true;
    }
}

所以我试图找到 600851475143 的最大素数,但是当我运行它时它不显示任何内容并且它一直在运行我该如何解决这个问题?

【问题讨论】:

  • 好吧,对于初学者来说,您可以使用更有效的质数检查。
  • 您是否需要找到特定数字的最大素数(600851475143)或者您的输入不是常数?
  • 这个号码
  • 您是否用一些较小的数字 (&lt; 100) 对其进行了测试,您知道正确的结果,因此可以确认您的算法甚至可以正常工作?
  • @Zabuza 早上不会这样做

标签: java prime-factoring


【解决方案1】:

这里有一个错误。 if (x.mod(i) == new BigInteger ("0")) 假设x=2, i=2,然后是x%i=0,但是这里会返回一个false,因为==会比较变量的地址而不是值。equals是首选。


正如@Zabuza 建议的那样,我找到了有关difference between == and equals 的资源。

【讨论】:

  • 您可以通过添加解释equals== 之间区别的资源来改进答案,例如,如果您愿意,可以添加另一个答案很好的 SO 问题。
  • 另外,您可以在第一个 for 循环中打印调试消息 System.out.println("DEBUG " + i);
  • @Zabuza SO 的缩写是什么?
  • SO 代表 StackOverflow,所以我们目前所在的网站:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-11-12
  • 2021-07-16
  • 1970-01-01
  • 1970-01-01
  • 2013-02-12
  • 2023-03-17
  • 2017-12-25
相关资源
最近更新 更多