Problème en JAVA, nombre premier ou pas !
Fermé
alex171
Ysaaltar - 8 avril 2010 à 22:10
- Messages postés
- 3
- Date d'inscription
- vendredi 5 mars 2010
- Statut
- Membre
- Dernière intervention
- 8 mars 2010
Ysaaltar - 8 avril 2010 à 22:10
A voir également:
- Nombre premier java
- Java nombre premier - Meilleures réponses
- Nombre premier en java - Meilleures réponses
- [java] nombre premier ✓ - Forum - Programmation
- Problème en JAVA, nombre premier ou pas ! - Forum - Java
- Langage C, Nombre premier ✓ - Forum - C
- Un programme qui affiche les nombres premiers - Forum - Java
- [JAVA]nombre premier - Forum - Programmation
9 réponses
alex171
8 mars 2010 à 15:46
- Messages postés
- 3
- Date d'inscription
- vendredi 5 mars 2010
- Statut
- Membre
- Dernière intervention
- 8 mars 2010
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;
}
}
}
}
}
}
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;
}
}
}
}
}
}
latoopa
8 mars 2010 à 17:04
- Messages postés
- 258
- Date d'inscription
- dimanche 11 octobre 2009
- Statut
- Membre
- Dernière intervention
- 5 janvier 2012
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
Scoleproj
6 mars 2010 à 12:50
- Messages postés
- 231
- Date d'inscription
- lundi 22 septembre 2008
- Statut
- Membre
- Dernière intervention
- 8 août 2022
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 !
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 !
Mihawk
6 mars 2010 à 12:59
- Messages postés
- 4311
- Date d'inscription
- mercredi 29 mars 2006
- Statut
- Contributeur
- Dernière intervention
- 6 janvier 2015
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.
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
- Messages postés
- 231
- Date d'inscription
- lundi 22 septembre 2008
- Statut
- Membre
- Dernière intervention
- 8 août 2022
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.
Ca revient au meme de faire un renvoyer dans un for des qu'on tombe sur un diviseur!
Ces deux algo sont semantiquement equivalent.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Mihawk
6 mars 2010 à 13:25
- Messages postés
- 4311
- Date d'inscription
- mercredi 29 mars 2006
- Statut
- Contributeur
- Dernière intervention
- 6 janvier 2015
6 mars 2010 à 13:25
oui, mais je suis pas un grand fan du "retourner" au milieu d'une boucle !
william7007
6 mars 2010 à 23:38
- Messages postés
- 335
- Date d'inscription
- dimanche 28 décembre 2008
- Statut
- Membre
- Dernière intervention
- 23 mars 2010
6 mars 2010 à 23:38
Slt les gars
vous avez raison j'ai mal lu l'exercice merci encore.
cdlt.
vous avez raison j'ai mal lu l'exercice merci encore.
cdlt.
alex171
8 mars 2010 à 17:08
- Messages postés
- 3
- Date d'inscription
- vendredi 5 mars 2010
- Statut
- Membre
- Dernière intervention
- 8 mars 2010
8 mars 2010 à 17:08
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.
On peut se contenter de sqrt(N), ce qui rend l'algorithme encore plus efficace.
william7007
5 mars 2010 à 21:52
- Messages postés
- 335
- Date d'inscription
- dimanche 28 décembre 2008
- Statut
- Membre
- Dernière intervention
- 23 mars 2010
5 mars 2010 à 21:52
slt,
cdlt
int nombre = (int)(Math.random()*100); String chaine = ""; chaine += nombre; chaine += (nombre % 2 == 0)? " Paire " : "Impaire"; System.out.println(chaine);
cdlt