Problème en JAVA, nombre premier ou pas ! [Fermé]

Signaler
Messages postés
3
Date d'inscription
vendredi 5 mars 2010
Statut
Membre
Dernière intervention
8 mars 2010
-
 Ysaaltar -
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

9 réponses

Messages postés
3
Date d'inscription
vendredi 5 mars 2010
Statut
Membre
Dernière intervention
8 mars 2010
2
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;
}

}

}


}
}

}
2
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 76687 internautes nous ont dit merci ce mois-ci

Messages postés
258
Date d'inscription
dimanche 11 octobre 2009
Statut
Membre
Dernière intervention
5 janvier 2012
31
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
2
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 76687 internautes nous ont dit merci ce mois-ci

Messages postés
226
Date d'inscription
lundi 22 septembre 2008
Statut
Membre
Dernière intervention
24 juillet 2012
26
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 !
Messages postés
4311
Date d'inscription
mercredi 29 mars 2006
Statut
Contributeur
Dernière intervention
6 janvier 2015
777
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) ;
}
Messages postés
226
Date d'inscription
lundi 22 septembre 2008
Statut
Membre
Dernière intervention
24 juillet 2012
26
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.
Messages postés
4311
Date d'inscription
mercredi 29 mars 2006
Statut
Contributeur
Dernière intervention
6 janvier 2015
777
oui, mais je suis pas un grand fan du "retourner" au milieu d'une boucle !
Messages postés
335
Date d'inscription
dimanche 28 décembre 2008
Statut
Membre
Dernière intervention
23 mars 2010
47
Slt les gars
vous avez raison j'ai mal lu l'exercice merci encore.
cdlt.
Messages postés
3
Date d'inscription
vendredi 5 mars 2010
Statut
Membre
Dernière intervention
8 mars 2010
2
Lol quelle bête faute !!! Merci Toopa :D
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.
Messages postés
335
Date d'inscription
dimanche 28 décembre 2008
Statut
Membre
Dernière intervention
23 mars 2010
47
slt,
                int nombre = (int)(Math.random()*100);
		String chaine = "";
		chaine += nombre;
		chaine += (nombre % 2 == 0)? " Paire " : "Impaire";
		System.out.println(chaine);


cdlt