解决方案:
事实证明,代码本身(可能)“没有错”;它只是效率低下。如果我的数学是正确的,如果我让它继续运行,它将在 2011 年 10 月 14 日星期五之前完成。我会告诉你的!
警告:如果您尝试解决 Project Euler #3,这可能包含剧透。
问题是这样说的:
13195 的质因数是 5、7、13 和 29。
数字 600851475143 的最大质因数是多少?
这是我解决它的尝试。我刚开始使用 Java 和一般编程,我知道这不是最好或最有效的解决方案。
import java.util.ArrayList;
public class Improved {
public static void main(String[] args) {
long number = 600851475143L;
// long number = 13195L;
long check = number - 1;
boolean prime = true;
ArrayList<Number> allPrimes = new ArrayList<Number>();
do {
for (long i = check - 1; i > 2; i--) {
if (check % i == 0) {
prime = false;
}
}
if (prime == true && number % check == 0) {
allPrimes.add(check);
}
prime = true;
check--;
} while (check > 2);
System.out.println(allPrimes);
}
}
当number
设置为13195时,程序运行良好,产生应有的结果[29, 13, 7, 5]。
为什么这不适用于较大的值number
?
密切相关(但不是欺骗):600851475143 的“整数太大”错误消息