Probleme de nombre premier PHP
Fermé
tamtam
-
Modifié par tamtam le 14/10/2013 à 23:17
mpmp93 Messages postés 6652 Date d'inscription mercredi 13 avril 2011 Statut Membre Dernière intervention 28 septembre 2015 - 16 oct. 2013 à 10:08
mpmp93 Messages postés 6652 Date d'inscription mercredi 13 avril 2011 Statut Membre Dernière intervention 28 septembre 2015 - 16 oct. 2013 à 10:08
A voir également:
- Probleme de nombre premier PHP
- Easy php - Télécharger - Divers Web & Internet
- Premier pro - Télécharger - Montage & Édition
- Décomposition facteur premier casio graph 35+e - Forum calculatrices
- Nombre facile - Télécharger - Outils professionnels
- Premier loto resultat ✓ - Forum Excel
6 réponses
Tarble
Messages postés
591
Date d'inscription
mercredi 29 septembre 2010
Statut
Membre
Dernière intervention
27 avril 2016
103
14 oct. 2013 à 23:34
14 oct. 2013 à 23:34
tu n'as meme pas defini la variable n
Utilisateur anonyme
Modifié par le père. le 15/10/2013 à 09:00
Modifié par le père. le 15/10/2013 à 09:00
Bonjour
@Tarble : Mais si, la variable $n est parfaitement bien définie...
@tamtam : C'est presque bon. Juste deux remarques :
Tu incrémentes $i en dehors de ta boucle, donc tu restes toujours dans $i<=$n, d'où une boucle infinie qui t'affiche une longue liste de 2.
Ce code ne t'affiche pas n nombres premiers, mais les nombres premiers inférieurs ou égaux à n (il y en a beaucoup moins que n)
Et pendant que j'y suis, j'ajoute une troisième remarque ; c'est l'algorithme le moins performant qu'on puisse imaginer, mais si tu débutes c'est déjà pas mal.
@Tarble : Mais si, la variable $n est parfaitement bien définie...
@tamtam : C'est presque bon. Juste deux remarques :
Tu incrémentes $i en dehors de ta boucle, donc tu restes toujours dans $i<=$n, d'où une boucle infinie qui t'affiche une longue liste de 2.
Ce code ne t'affiche pas n nombres premiers, mais les nombres premiers inférieurs ou égaux à n (il y en a beaucoup moins que n)
Et pendant que j'y suis, j'ajoute une troisième remarque ; c'est l'algorithme le moins performant qu'on puisse imaginer, mais si tu débutes c'est déjà pas mal.
ThEBiShOp
Messages postés
8378
Date d'inscription
jeudi 22 mars 2007
Statut
Contributeur
Dernière intervention
8 février 2021
1 565
15 oct. 2013 à 09:11
15 oct. 2013 à 09:11
Je rajouterai une chose :
Je pense que si tu indentais correctement ton code, tu pourrais y voir plus clair.
ce qui donnerait ça :
ou ça :
on voit tout de suite que ton incrémentation n'est pas dans ton while, comme le dit le père
Je pense que si tu indentais correctement ton code, tu pourrais y voir plus clair.
ce qui donnerait ça :
function np($n)
{
$i = 2;
while ($i <= $n)
{
$j = 2;
while ($i % $j != 0)
{
$j++;
}
if ($i == $j)
{
echo $i;
}
}
$i++;
}
ou ça :
function np($n) {
$i = 2;
while ($i <= $n) {
$j = 2;
while ($i % $j != 0) {
$j++;
}
if ($i == $j) {
echo $i;
}
}
$i++;
}
on voit tout de suite que ton incrémentation n'est pas dans ton while, comme le dit le père
Tarble
Messages postés
591
Date d'inscription
mercredi 29 septembre 2010
Statut
Membre
Dernière intervention
27 avril 2016
103
16 oct. 2013 à 00:47
16 oct. 2013 à 00:47
au lieu de mettre echo $i met return $i
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Utilisateur anonyme
16 oct. 2013 à 08:52
16 oct. 2013 à 08:52
S'il met return $i, la fonction renverra toujours 2.
Par contre, lors de l'appel, le 'echo' est illogique, quoi que sans conséquences.
Il vaut mieux mettre np(5); plutôt que echo np(5); car l'affichage est fait à l'intérieur de la fonction.
Par contre, lors de l'appel, le 'echo' est illogique, quoi que sans conséquences.
Il vaut mieux mettre np(5); plutôt que echo np(5); car l'affichage est fait à l'intérieur de la fonction.
mpmp93
Messages postés
6652
Date d'inscription
mercredi 13 avril 2011
Statut
Membre
Dernière intervention
28 septembre 2015
1 339
16 oct. 2013 à 10:08
16 oct. 2013 à 10:08
Bonjour,
Voici une fonction récursive qui teste si n est premier:
Voici une fonction récursive qui teste si n est premier:
<?phpA+
function IsPrime($num) {
$No = 0 ;
$Result = 0 ;
for($Divisor = 2 ; $Divisor < $num; $Divisor++) {
$Result = $num / $Divisor ;
if($Result != 1 && intval($Result) == $Result) {
$No = 1 ;
break ;
}
}
if($No != 1 ) {
$Result = $num ;
}
$No = 0;
return ($Result == $num) ? 'Yes' : 'No' ;
}
for($i = 0; $i < 100; $i++) {
echo "<b> Nombre testé $i : </b>" ;
echo $i." est premier? ". IsPrime($i)."<br />";
}
?>