Probleme de nombre premier PHP
tamtam
-
mpmp93 Messages postés 7217 Date d'inscription Statut Membre Dernière intervention -
mpmp93 Messages postés 7217 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
- Nombre facile - Télécharger - Outils professionnels
- Easy php - Télécharger - Divers Web & Internet
- Expert php pinterest - Télécharger - Langages
- Clémence souhaite faire calculer automatiquement les prix de 30 produits dans trois devises. elle a déjà saisi une formule de calcul pour le tarif du premier produit dans la première devise. corrigez sa formule afin que recopiée vers le bas puis vers la droite, elle remplisse correctement tout le tableau. - Forum Excel
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 />";
}
?>