【问题标题】:Questions over BigInteger?关于 BigInteger 的问题?
【发布时间】:2013-06-16 22:35:50
【问题描述】:
import java.math.BigInteger;
public class ProjectEuler {
    public static void main(String[] args) {
        BigInteger bi = new BigInteger("600851475143");
        int div = 7;
        while (bi.compareTo(new BigInteger("1")) != 0) {
            while (bi.mod(new BigInteger(div + "")).compareTo(new BigInteger("0")) == 0) {
                bi = bi.divide(new BigInteger(div + ""));
            }
            div += 2;
        }
        System.out.println("" + div);
    }
}

我只是在研究“600851475143 的最大素因数是什么”这一基本但著名的问题。我发现这个解决方案不同,我有几个关于它是如何工作的问题。

  1. 第一个条件检查数字是否等于 1。从那里我无法理解其余的代码。
  2. new BigInteger(div +"")。为什么我们在这里连接 + ""?

【问题讨论】:

  • 可能作者注意到这个数字不能被 2、3 或 5 整除。这不是火箭科学。
  • @LuiggiMendoza:几秒钟内 2 个负数...
  • "从那里我无法理解其余的代码。" - 你试过咨询BigInteger javadocs吗?如果有,有什么具体的你不明白吗?
  • @LuiggiMendoza 这提出了一个愚蠢的问题:对这个 Project Euler 问题的最快答案是否会对您预先计算的结果进行硬编码?
  • @Vinothbabu 您正在将几个 cmets 混合在一起。 “愚蠢”的问题是我提出的。 OP 的问题只是质量低下 - 非常模糊,显示零自己的研究等。

标签: java biginteger


【解决方案1】:

div = 7是怎么决定的?

作者决定“硬编码”他对数字本身的了解,以确定前三个素数不在除数中

第一个条件检查数字是否等于 1。从那里我无法理解其余的代码。

其余代码在“常规”整数中如下所示:

while (bi % div == 0) {
    bi /= div;
}
div += 2;

new BigInteger(div +"") 为什么要在这里连接+ ""

这是使对象成为String 的一种简便方法。 BigInteger 有一个采用 String 的参数,因此这种方法的替代方法是调用 Integer.toString(div)

请注意,这不是最有效的解决方案:您可以通过观察当您达到原始数字的平方根时停止尝试除法来加快此过程,因为您可以确定下一个除数将是编号本身。

【讨论】:

  • @excellent,你能再解释一下最后一段吗,“可以通过观察到当你达到原始数字的平方根时停止尝试除法来加快速度,因为你可以确保下一个除数将是数字本身。”
  • @Kevin 在这里解释得更好:Prime Factorization Calculator
【解决方案2】:

div = 7是怎么决定的?

可能作者注意到这个数字不能被2、3或5整除。要知道作者是如何做到这一点的,他/她应该知道这个规则:Divisibility Rules and Tests

第一个条件检查数字是否等于 1。从那里我无法理解其余的代码。

作者确保数字不是BigInteger("1"),因为它在循环迭代中将数字除以bi。请注意:

bi = bi.divide(new BigInteger(div + ""));

new BigInteger(div +"")。为什么我们在这里连接 + ""?

它使用BigInteger(String) 构造函数。作者 n̶a̶i̶v̶e̶l̶y̶ 通过添加 int 和空的 String 来创建新的 String

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-29
    • 2011-09-22
    • 2018-05-23
    • 2011-11-16
    • 2021-03-27
    • 2017-01-27
    相关资源
    最近更新 更多