2017-06-29 1 views
0

Ich habe einen Code, den ich für Project Euler verwende. Es ist der größte Primfaktor von 600851475143 zu finden. Das dauert sehr lange, mindestens 30 Minuten. Kannst du sehen, ob es nur weil mein Code zu lange dauert oder mein Code falsch ist? Auch irgendwelche Tipps, um die Laufzeit schneller zu machen?So finden Sie den größten Primfaktor von 600851475143 in Java

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

Warum machen Sie Ihre beiden 'for' Loops wie Sie? –

+0

Wie lange ist "eine wirklich lange Zeit"? – shmosel

+1

@shmosel Länger als ein Stück String –

Antwort

2

Wie über diese Lösung:

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

schnell läuft für mich.

Verwandte Themen