如何在java

时间:2017-06-29 01:22:47

标签: java

我有一些我用于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;
}

1 个答案:

答案 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);
}

对我来说很快。