2017-04-30 1 views
-5
public boolean isPrimeNum (int n) { 
    boolean isPrime= true; 
    for(int i=2; i<= n; i++) { 
    if(n%i==0) { 
    isPrime= false; 
} 
isitPrime= true; 

    if(isPrime) 
    System.out.println("its a prime number"); 
    else 
    System.out.println("its a composite number"); } 

}Méthode pour vérifier si un nombre est premier ou composé

J'ai essayé d'écrire cette méthode pour vérifier si un nombre est premier ou composé, mais je ne suis pas sûr que ce soit correct. Toute forme d'aide serait appréciée et merci d'avance.

+2

L'avez-vous testé? – Carcigenicate

+1

Il n'est même pas compilable, car l'instruction 'return' est manquante. –

+1

Êtes-vous sûr de devoir incrémenter «i» jusqu'à la valeur «n»? Si vous vérifiez par exemple n = 7, devez-vous vérifier en divisant par tous les nombres jusqu'à 7 pour vérifier s'il est premier? –

Répondre

-1

Vous devriez rechercher google pour ce type de questions. Cependant je réponds à une façon optimisée de trouver des nombres premiers

private static boolean isPrimeNum(int n){ 
    if(n==2 || n==3) return true; 
    if(n%2==0 || n%3==0) return false; 

     for(int i=5;i<=Math.sqrt(n);i=i+2){ 
      if(n%i==0) return false; 

     } 
    return true; 
} 
+0

Ne fonctionnera pas pour 'n = 2' ou' n = 3'. – Charanor

+0

@Charanor corrigé – Kangkan

0

Voici votre code refactorisé. N'hésitez pas à commenter si vous avez des questions.

class PrimeChecker { //Has to be in a class 
     public boolean isPrimeNum(int n) { 
      boolean isPrime=true; 
      for (int i=2; i < n; i++) { //Has to be i < n instead of i <= n, every number can be divided by itself 
       if (n%i==0) { 
       isPrime=false; 
       break; //Note you can break then 
       } 
      } //You were missing this 
      //Removed : isitPrime= true; makes absolutely no sense 
      if(isPrime) { 
      System.out.println("its a prime number"); 
      return true; //Breaks, you wont need else anymore 
      } //You were missing these again 
      System.out.println("its a composite number"); 
      return false; 
    } 
} 
0

Vous pouvez faire un peu (très légère) plus efficace en cochant la modulo (%) jusqu'à ce < = (n/2) comme principal facteur d'un nombre (lui-même exclu) sera toujours inférieur ou égal à sa moitié, c'est-à-dire pour (int i = 2; i < = n/2; i ++); Oh et vérifiez séparément 2 et 3 :)