Probleme de nombre premier PHP
tamtam
-
mpmp93 Messages postés 6648 Date d'inscription Statut Membre Dernière intervention -
mpmp93 Messages postés 6648 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
je viens de rédiger ce code :
mais ca ne marche pas... pourquoi?
je viens de rédiger ce code :
<?phpqui devrais m'afficher les n nombre premier
function np($n)
{
$i=2;
while ($i<=$n)
{
$j=2;
while($i%$j!=0)
{
$j++;
}
if ($i == $j)
{echo $i;}
}
$i++;
}
echo np(5);
?>
mais ca ne marche pas... pourquoi?
A voir également:
- Probleme de nombre premier PHP
- Nombre de jours entre deux dates excel - Guide
- Easy php - Télécharger - Divers Web & Internet
- Nombre facile - Télécharger - Outils professionnels
- Ascii nombre de caractères - Guide
- Expert php pinterest - Télécharger - Langages
6 réponses
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.
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
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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.
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 />";
}
?>