Problème en JAVA, nombre premier ou pas !

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

9 réponses

alex171
Messages postés
3
Date d'inscription
vendredi 5 mars 2010
Statut
Membre
Dernière intervention
8 mars 2010
2
8 mars 2010 à 15:46
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
latoopa
Messages postés
258
Date d'inscription
dimanche 11 octobre 2009
Statut
Membre
Dernière intervention
5 janvier 2012
32
8 mars 2010 à 17:04
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
Scoleproj
Messages postés
231
Date d'inscription
lundi 22 septembre 2008
Statut
Membre
Dernière intervention
8 août 2022
26
6 mars 2010 à 12:50
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 !
0
Mihawk
Messages postés
4311
Date d'inscription
mercredi 29 mars 2006
Statut
Contributeur
Dernière intervention
6 janvier 2015
842
6 mars 2010 à 12:59
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) ;
}
0
Scoleproj
Messages postés
231
Date d'inscription
lundi 22 septembre 2008
Statut
Membre
Dernière intervention
8 août 2022
26
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.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

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


cdlt
-1