par
Spols » 21 déc. 2010, 17:42
La solution est fonctionnelle, mais pas optimisé. Pour des recherches sur un grands nombre de nombre cela se ressentira.
Il est possible de l'optimiser en utilisant les constatation du premier code.
-si un nombre n'est pas paire, (pas divisible par 2 qui est le premier test) il ne sera pas divisible par un nombre paire.
-un nombre ne peut pas être divisible par un nombre supérieur à sa raçine
<?php
$nb = 1;
$nb_max = 50;
while ($nb <= $nb_max) {
if ($nb == 1) {
echo $nb.' n\'est pas un nombre premier<br>';
$nb++;
continue;
}
$a = 0;
if (!is_int($nb/2)){
$racine = ;//Je sais plus de tête le code de calcul d'une racine
for ($i=3; $i<$racine; $i = $i+2){
if (is_int($nb/$i)){
$a++;
echo $nb.' n\'est pas un nombre premier<br>';
break;
}
}
}
else
{
echo $nb.' n\'est pas un nombre premier<br>';
$nb++;
continue;
}
if ($a == 0) echo '<b>'.$nb.' est un nombre premier</b><br>';
$nb++;
}
?>
Mieux encore, stocké les nombres premiers dans une array et ne tester que la divisibilité sur ceux ci (tester la divisibilité par 9 est inutile si on l'a déja testé pour 3)
Mais je laisse ceci en exercice
La solution est fonctionnelle, mais pas optimisé. Pour des recherches sur un grands nombre de nombre cela se ressentira.
Il est possible de l'optimiser en utilisant les constatation du premier code.
-si un nombre n'est pas paire, (pas divisible par 2 qui est le premier test) il ne sera pas divisible par un nombre paire.
-un nombre ne peut pas être divisible par un nombre supérieur à sa raçine
[php]<?php
$nb = 1;
$nb_max = 50;
while ($nb <= $nb_max) {
if ($nb == 1) {
echo $nb.' n\'est pas un nombre premier<br>';
$nb++;
continue;
}
$a = 0;
if (!is_int($nb/2)){
$racine = ;//Je sais plus de tête le code de calcul d'une racine
for ($i=3; $i<$racine; $i = $i+2){
if (is_int($nb/$i)){
$a++;
echo $nb.' n\'est pas un nombre premier<br>';
break;
}
}
}
else
{
echo $nb.' n\'est pas un nombre premier<br>';
$nb++;
continue;
}
if ($a == 0) echo '<b>'.$nb.' est un nombre premier</b><br>';
$nb++;
}
?>[/php]
Mieux encore, stocké les nombres premiers dans une array et ne tester que la divisibilité sur ceux ci (tester la divisibilité par 9 est inutile si on l'a déja testé pour 3)
Mais je laisse ceci en exercice