Probleme de nombre premier PHP

tamtam -  
mpmp93 Messages postés 2931 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,
je viens de rédiger ce code :
<?php
function np($n)
{
$i=2;
while ($i<=$n)
{
$j=2;
while($i%$j!=0)
{
$j++;
}
if ($i == $j)
{echo $i;}
}
$i++;
}
echo np(5);
?>
qui devrais m'afficher les n nombre premier
mais ca ne marche pas... pourquoi?

6 réponses

  1. Tarble Messages postés 694 Statut Membre 103
     
    tu n'as meme pas defini la variable n
    0
  2. Utilisateur anonyme
     
    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.
    0
  3. ThEBiShOp Messages postés 9307 Date d'inscription   Statut Contributeur Dernière intervention   1 606
     
    Je rajouterai une chose :

    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
    0
  4. Tarble Messages postés 694 Statut Membre 103
     
    au lieu de mettre echo $i met return $i
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Utilisateur anonyme
     
    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.
    0
  7. mpmp93 Messages postés 2931 Date d'inscription   Statut Membre Dernière intervention   1 343
     
    Bonjour,

    Voici une fonction récursive qui teste si n est premier:

    <?php
    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 />";
    }

    ?>
    A+
    0