Les Allergies
Alimentaires
Posez votre question Signaler

Problème en JAVA, nombre premier ou pas !

alex171 3Messages postés 5 mars 2010Date d'inscription 8 mars 2010Dernière intervention - Dernière réponse le 8 avril 2010 à 22:10
Bonjour à tous, j'espère que vous allez bien.
J'ai un problème avec un exercice de programation en JAVA :
Voici son énoncé : Générez un nombre aléatoire entier compris entre 0 et 100 et vérifiez s'il est premier ou pas.
Je n'ai vu que les alternatives, if else, les répétitives, while, do while, for et je ne vois pas comment le résoudre.
Si vous pouviez m'aider ce serait super !
MERCI
Lire la suite 

Problème en JAVA, nombre premier ou pas »

10 réponses
Réponse
+0
moins plus
Slt, je ne sais pas si tu as testé le code de william7007, mais on dirait qu'il a pas bien compris le sujet.
On demande si un nombre est premier et pas si il est paire ou impaire.
Un nombre premier est un nombre qui est divisible seulement par soit meme ou par un.

Je n'ai vu que les alternatives, if else, les répétitives, while, do while, for et je ne vois pas comment le résoudre.

Tu n'as ps besion d savoir plus que ca pour cet exo.

Je te donne donc l'idée sous forme d'algo.
Pour i de 1 a nombre/2 faire
si i nombre % i <> 0 alors
retourner false; //Ou tu peux faire un afficher.
-- fsi;
fin pour;
return true //Ou Afficher ce nombre est premier

Quelle prétention de prétendre que l'informatique est récente : Adam et Eve avaient déjà un Apple !
Ajouter un commentaire
Réponse
+0
moins plus
Il n'y a pas de miracle pour les nombres premiers... Les mathématiciens se cassent les dents dessus : pour savoir si un nombre premier, la seule solution est de le tester.
Plutôt que la boucle en for, je te conseille la boucle en while, plus rapide puisqu'elle s'arrêtera dès qu'elle trouvera un diviseur !
On a besoin de 2 variables :
i : entier qui va parcourir les nombres de 2 à nombre/2
bPremier : booléen qui vaudra au final VRAI si le nombre est premier, et FAUX sinon.

public boolean verifierNombrePremier(int iNombre){
     int i = 2 ;
     boolean bPremier = true ;
     while(bPremier == true && i<iNombre/2){
          if (iNombre%i == 0){
              bPremier = faux ;
          }
          i++ ;
     }
     return (bPremier) ;
}
Scoleproj- 6 mars 2010 à 13:18
je te conseille la boucle en while, plus rapide puisqu'elle s'arrêtera dès qu'elle trouvera un diviseur !

Ca revient au meme de faire un renvoyer dans un for des qu'on tombe sur un diviseur!
Ces deux algo sont semantiquement equivalent.
Ajouter un commentaire
Réponse
+0
moins plus
oui, mais je suis pas un grand fan du "retourner" au milieu d'une boucle !
Ajouter un commentaire
Réponse
+0
moins plus
Slt les gars
vous avez raison j'ai mal lu l'exercice merci encore.
cdlt.
Ajouter un commentaire
Réponse
+0
moins plus
Voici mon programme mais il me reste un problême quand le nombre n'est pas premier, il est mis bien Ce nbre n'est pas un nombre premier mais lorsqu'il l'est, rien ne s'affiche. Pouvez vous jeter un coup d'oeil svp?


public class Devoir_info {
public static void main (String[] args) {

int nbre = (int) (Math.random()*100) ;
Ecrire.R ("Le nombre est "+ nbre) ;

if (nbre<2) {
Ecrire.R (" " + nbre + " n'est pas un nombre premier");

}
else {

for (int i = 2 ; i <= (nbre/2) ; i++) {
if (nbre!= i && nbre% i == 0) {
if (nbre!= i && nbre% i == 0) {
Ecrire.R (" " + nbre + " n'est pas un nombre premier");

} else {
Ecrire.R (" "+ nbre + " est un nombre premier");
break;
}

}

}


}
}

}
Ajouter un commentaire
Réponse
+0
moins plus
if (nbre!= i && nbre% i == 0) { 
if (nbre!= i && nbre% i == 0) { 
Ecrire.R (" " + nbre + " n'est pas un nombre premier"); 

} else { 
Ecrire.R (" "+ nbre + " est un nombre premier"); 
break; 
} 


Salut !

Le problème vient de tes deux if consécutifs, tu testes les 2 fois la même chose... Donc tu ne rentres jamais dans le Else (car si tu rentres dans le premier if tu rentres forcément dans le 2eme) !

Voilà ;)

Toopa
Ajouter un commentaire
Réponse
+0
moins plus
Lol quelle bête faute !!! Merci Toopa :D
Ajouter un commentaire
Réponse
+0
moins plus
Ajoutons que pour ce problème, il est mathématiquement inutile de tester jusque à N/2.

On peut se contenter de sqrt(N), ce qui rend l'algorithme encore plus efficace.
Ajouter un commentaire
Réponse
-1
moins plus
slt,
                int nombre = (int)(Math.random()*100);
		String chaine = "";
		chaine += nombre;
		chaine += (nombre % 2 == 0)? " Paire " : "Impaire";
		System.out.println(chaine);


cdlt
Ajouter un commentaire
Ce document intitulé « Problème en JAVA, nombre premier ou pas ! » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?