【发布时间】:2014-07-16 04:17:12
【问题描述】:
我试图解决项目 Euler problem 3 是:
13195 的质因数是 5、7、13 和 29。 数字 600851475143 的最大质因数是多少?
这是我的解决方案,它适用于较小的值,但不知何故无法完成所需的数字:
public class Pro3 {
public static void main(String[] args) {
long l=600851475143L;
for(long lo=l/2;lo>=2;lo--){
if(l%lo==0 && isPrime(lo)==true){
System.out.println(lo);
break;
}
}
}
static boolean isPrime(long x){
for(int i=2;i<=Math.sqrt(x);i++){
if(x%i==0){
return false;
}
}
return true;
}
}
【问题讨论】:
-
那么到底发生了什么?
-
我的程序一直在运行,没有任何输出或错误。
-
它最终会在很长一段时间内完成。一千年之类的东西。所以在这方面,你的程序没有坏,只是效率低。
-
此外,考虑优化您的 isPrime 代码以提高效率。建立一个已知素数的列表,而不是处理 2 以外的偶数,将显着提高后续 isPrime 调用的速度。
标签: java