2017-02-24 1 views
-1

Le programme fonctionne très bien pour un petit nombre, mais dès que je prends un grand nombre comme cela, il ne fonctionne pas ici est mon codeprogramme java donnant sortie vide

public class Main { 


    public static void main(String[] args) { 
     long no=600851475143L,i; 
     int result=0; 
     for(i=(no/2);i>=2;i--){ 
      if(no%i==0){ 
       if(checkPrime(i)){ 
        System.out.println("Longest Prime Factor is: " + i); 
        break; 
       } 
      } 

     } 

    } 
    private static boolean checkPrime(long i){ 
     for(long j=2L;j<=(int)Math.sqrt(i);j++){ 
      if(i%j==0) 
       return false; 
     } 
     return true; 
    } 

} 
+1

erreurs? sortie? – Massimo

+1

D'un coup d'oeil ça marche probablement, mais vous vous rendez compte que ça va tourner assez longtemps? Dans votre échantillon ressemble à ça va être plusieurs centaines de milliards d'itérations ... –

+0

j'ai attendu 5-7 minutes toujours pas de chance .. juste la sortie vide –

Répondre

0

pour attribuer longue valeur de la variable nous ne nécessite pas écrire L enfin à la valeur Supprimer L.

+0

sans L il donne une erreur car il sort de la plage de nombres entiers –

0

L'affichage de la réponse prendra du temps. Essayez juste avec un petit nombre (1000000) presque 10 à 15 minutes pour le code ci-dessus.

Essayez cette

public class Main { 
public static void main(String[] args) { 
    //long no=600851475143L,i; 
    System.out.println(largestPrimeFactor(600851475143L)); 
} 
public static int largestPrimeFactor(long number) { 
    int i; 
    for (i = 2; i <= number; i++) { 
     if (number % i == 0) { 
      number /= i; 
      i--; 
     } 
    } 
    return i; 
} 
} 

[1] https://en.wikipedia.org/wiki/Sieve_of_Eratosthenes

+0

vous avez exécuté le même code juste changé le dessus? Ce ne fonctionne pas pour moi .. –