Bonjour j'ai cette exercice: Faire un algorithme qui affiche les nombres premiers jusqu’à 1000
en mettant un retour à la ligne entre chaque nombre (“<br />”).


j'ai écrit ceci :


<?php

    $i = 1;

    while ($i < 1001) {


        if ($i %1 === 0 and $i %$i === 0 and $i %$i !== 0){
            echo "$i";
            echo "<br/>";
        }


        $i = $i + 1;
    } 
?>


Selon moi, j'ai dit :
Dans ma variable i (qui fait apparaitre pour le calcule les chiffres de 1 a 1000) si il y en a un chiffre qui est divisable par lui même et par 1 et pas par et et pas autre chose, on le fait apparaitre.
pourtant, cela ne marche pas, une idée s'il vous plais ? Il n'y a pas de bug juste aucune réponse.

J'ai deux choses contradictoire " %$i === 0 and $i %$i !== 0)" c'est ça le problème je pense . Mais je ne sais comment le contourner.
Modifié par freeeeezi (06 Nov 2020 - 14:50)
Modérateur
Bonjour,

Voilà ce que c'est que de jouer à Candy Crush pendant les cours de maths (et sans doute aussi pendant les cours de programmation).

1) Tous les nombres entiers sont divisibles par 1. Le test ($i %1)===0 est inutile.

2) Tes deux autres tests ($i %$i )=== 0 et ($i %$i )!== 0 donnent deux résultats opposés tout le temps : si l'un est vrai, l'autre est forcément faux. Du coup, aucun nombre ne passe le test.

3) À l'époque reculée où j'allais à l'école, on utilisait le crible d'Ératosthène pour déterminer les nombre premiers inférieurs à un nombre quelconque. Je ne sais pas si c'est encore le cas dans les cours de maths aujourd'hui. Il existe de multiples sites qui expliquent comment marche ce crible comme par exemple https://www.jeuxmaths.fr/cours/nombres-premiers.php

4) Sauras-tu coder ça ? Smiley cligne

Amicalement,
Modérateur
parsimonhi a écrit :
3) À l'époque reculée où j'allais à l'école, on utilisait le crible d'Ératosthène pour déterminer les nombre premiers inférieurs à un nombre quelconque. Je ne sais pas si c'est encore le cas dans les cours de maths aujourd'hui. Il existe de multiples sites qui expliquent comment marche ce crible comme par exemple https://www.jeuxmaths.fr/cours/nombres-premiers.php

Waaah archi stylée comme méthode, mais a coder j'avoue que je sais pas si c'est la plus simple Smiley lol

Sinon +1 a tout ce que parsimonhi a dit.

En gros et d'une façon très simpliste et pas optimisée pour bien capter le truc : dans ta boucle, pour chaque chiffre $i donc, il te faudrait une autre boucle avec $j qui va de 2 à $i et qui tente de diviser $i par $j. Si tu as une réponse positive et que $i est différent de $j alors le nombre n'est pas premier et tu peux passer au $i suivant.

GLHF
Modifié par _laurent (06 Nov 2020 - 15:30)
parsimonhi a écrit :
Bonjour,

Voilà ce que c'est que de jouer à Candy Crush pendant les cours de maths (et sans doute aussi pendant les cours de programmation).

1) Tous les nombres entiers sont divisibles par 1. Le test ($i %1)===0 est inutile.

2) Tes deux autres tests ($i %$i )=== 0 et ($i %$i )!== 0 donnent deux résultats opposés tout le temps : si l'un est vrai, l'autre est forcément faux. Du coup, aucun nombre ne passe le test.

3) À l'époque reculée où j'allais à l'école, on utilisait le crible d'Ératosthène pour déterminer les nombre premiers inférieurs à un nombre quelconque. Je ne sais pas si c'est encore le cas dans les cours de maths aujourd'hui. Il existe de multiples sites qui expliquent comment marche ce crible comme par exemple https://www.jeuxmaths.fr/cours/nombres-premiers.php

4) Sauras-tu coder ça ? Smiley cligne

Amicalement,




"Voilà ce que c'est que de jouer à Candy Crush pendant les cours de maths (et sans doute aussi pendant les cours de programmation)." c'est déplacé je trouve (et je n'ais pas de cours de programmation) .

merci de la réponse
Modifié par freeeeezi (06 Nov 2020 - 16:02)
Modérateur
Bonjour,
_laurent a écrit :
Waaah archi stylée comme méthode, mais a coder j'avoue que je sais pas si c'est la plus simple Smiley lol

Effectivement, j'ai essayé, et ce n'est pas si simple.

_laurent a écrit :
En gros et d'une façon très simpliste et pas optimisée pour bien capter le truc : dans ta boucle, pour chaque chiffre $i donc, il te faudrait une autre boucle avec $j qui va de 2 à $i et qui tente de diviser $i par $j. Si tu as une réponse positive et que $i est différent de $j alors le nombre n'est pas premier et tu peux passer au $i suivant.

Oui, ça peut marcher.

freeeeezi a écrit :
"Voilà ce que c'est que de jouer à Candy Crush pendant les cours de maths (et sans doute aussi pendant les cours de programmation)." c'est déplacé je trouve (et je n'ais pas de cours de programmation).

Admettons. Mais tu dois comprendre que tu nous mets à rude épreuve ! On a l'impression que tu codes totalement au hasard !

Voici une version qui code le crible d'Eratosthène (j'espère ne pas avoir fait d'erreur, mais je n'en suis pas sûr à 100%).
$n=1000;
$a=array();
$i2=intval(sqrt($n));
for($i=2;$i<=$i2;$i++)
	if(!isset($a[$i])) for($j=($i<<1);$j<=$n;$j+=$i) $a[$j]=1;
for($i=2;$i<=$n;$i++) if(!isset($a[$i])) echo $i."<br>";

Amicalement,
Modifié par parsimonhi (06 Nov 2020 - 19:57)