§--------------------------------------------------------------------------------- § ------------------ © Æspace 2001, tous droits réservés ---------------------- §--------------------------------------------------------------------------------- § Eratostène était mathématicien, astronome et philosophe grec de l'école d'Alexandrie. § Il est né à Cyrène vers 284 et mort vers 192 avant Jésus-Christ. Il mesura le méridien § terrestre et l'obliquité de l'écliptique. Pour ce qui nous concerne ici, en mathématiques, § il inventa un moyen de trouver les nombres premiers compris dans un intervalle donné § ici, entre 1 et Max. Ce moyen était le suivant : placer les Max nombres de 1 à Max sur § une feuille de papier. A partir du nombre 2 qui est premier, on barre tous les nombres § entre 1 et Max multiples de 2. Une fois ce travail fait, le premier nombre qui apparait § après 2 est le nombre 3. Il est alors premier. Ensuite, on barre à nouveau tous les § multiples de 3 et ainsi de suite jusqu'au dernier nombre qui apparaît comme étant non barré. § Ce moyen de trouver les nombres premiers compris dans un intervalle s'appelle § § L E C R I B L E D ' E R A T O S T H E N E § ================================= EffaceListe § on initialise la calculatrice § On saisit la borne supérieure d'analyse des nombres premiers (maximum 6000) §==================================================================== jecontinue=1 Max = 1 tant que jecontinue=1 Max = SaisieNb("Les nombres premiers sont" "à trouver entre 1 et" "?") jecontinue=0 si Max < 2 Alerte("La borne supérieure doit" "" "être au moins égale à 2 !") jecontinue=1 fin si Max > 6000 Alerte("La borne supérieure doit" "" "être au maximum 6000") jecontinue=1 fin fin NbChif = Longueur(Max) § Nombre de chiffres de la borne Max § On prépare l'affichage §==================================================================== AfficheListe("Nombres premiers ") AfficheListe("entre 1 et "+Max+" ") AfficheListe("================ ") AfficheListe(" ") § Tout d'abord, écrivons tous les nombres compris entre 1 et Max § dans la variable de travail "Liste" : §==================================================================== InitChrono § on initialise le chronomètre pour afficher le temps de calcul à la fin Liste = 2 a = 2 tant que a < Max a = a + 1 Liste = Liste+" "+a fin Liste = Liste + " " § On ajoute un espace à la fin pour réaliser le traitement suivant en standard § On réalise le crible §==================================================================== n = 0 § nombre de nombres premiers trouvés NbPremiers = "" § nombres premiers à afficher position = 1 § Position du nombre suivant l'espace de la Liste tant que Liste # "" & (position > 0) § Ensuite cherchons le premier nombre dans la liste qui suit le nombre "a" qui est premier. §==================================================================== position = ChercheChaine(" " Liste) § Position du nombre suivant l'espace si position > 0 nbsuivant = Chaine(Liste 1 position-1) § On cherche le nb premier suivant Liste = Chaine(Liste position+1 NbChif*Max) § Suppression du nombre § On mémorise ce nombre suivant qui est premier §==================================================================== NbPremiers = NbPremiers + " " +nbsuivant n = n + 1 § On efface de la liste les multiples de ce nombre suivant §==================================================================== multiple = nbsuivant tant que multiple <= Max multiple = multiple + nbsuivant Liste = RemplaceChaine(Liste " "+multiple+" " " ") fin fin fin temps=TopChrono § Affichage des nombres premiers trouvés dans la liste et dans la zone résultat pour les avoir § aussi dans la fenêtre d'extension. n = n + 1 § pour ajouter le nombre 1 dans la liste NbPremiers=1+NbPremiers AfficheListe("Il y en a "+n+" : ") AfficheListe(" ") AfficheListe(NbPremiers) AfficheRésultat("Il y a "+n+" nombres premiers :"+NbPremiers) AfficheListe(" ") AfficheListe("Temps de calcul : "+temps + " ms")