【发布时间】: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。从那里我无法理解其余的代码。
-
new BigInteger(div +"")。为什么我们在这里连接 + ""?
【问题讨论】:
-
可能作者注意到这个数字不能被 2、3 或 5 整除。这不是火箭科学。
-
@LuiggiMendoza:几秒钟内 2 个负数...
-
"从那里我无法理解其余的代码。" - 你试过咨询
BigIntegerjavadocs吗?如果有,有什么具体的你不明白吗? -
@LuiggiMendoza 这提出了一个愚蠢的问题:对这个 Project Euler 问题的最快答案是否会对您预先计算的结果进行硬编码?
-
@Vinothbabu 您正在将几个 cmets 混合在一起。 “愚蠢”的问题是我提出的。 OP 的问题只是质量低下 - 非常模糊,显示零自己的研究等。
标签: java biginteger