我有一些我用于Project Euler的代码。它是找到600851475143的最大素数因子。这需要很长时间才能运行,至少已经过了30分钟。你们可以看看它是否只是因为我的代码需要太长时间,或者我的代码是错误的。还有,提高运行时间的任何提示吗?
public static void main(String[] args) {
System.out.println(factor(600851475143L));
}
public static long factor(long rc){
long num = rc;// need to add L to make it compile as long not int
long i;
long j;
long largest = 0;
long temp;
for(i = 2; i<rc;i++){
for(j=2;j<rc;j++){
if(i%j==0){
break;
}
if(j==rc-1){
temp = i;
if(largest<temp){
largest=temp;
}
else{
temp = 0;
}
}
}
}
return largest;
}
答案 0 :(得分:3)
这个解决方案怎么样:
public static long factor(long rc) {
long n = rc;
List<Long> pfactors = new ArrayList<Long>();
for (long i = 2 ; i <= n ; i++) {
while (n % i == 0) {
pfactors.add(i);
n = n / i;
}
}
return pfactors.get(pfactors.size() - 1);
}
对我来说很快。