« Crible d'Ératosthène » : différence entre les versions

Contenu supprimé Contenu ajouté
Balougador (discuter | contributions)
LiveRC : Révocation des modifications de 193.49.212.181; retour à la version de 193.49.212.181
Proz (discuter | contributions)
→‎Version récursive : à sourcer : incomplet et pas clair
(285 versions intermédiaires par plus de 100 utilisateurs sont masquées)
Ligne 1 :
{{Voir homonymes|Ératosthène (homonymie)}}
Le crible d'[[Ératosthène]] est un procédé qui permet de trouver tous les [[nombre premier|nombres premiers]] inférieurs à un certain [[entier naturel]] donné ''N''. C'est l'ancêtre du plus récent [[crible d'Atkin]] qui est plus rapide mais plus complexe.
 
Le '''crible d'[[Ératosthène]]''' est un procédé qui permet de trouver tous les [[nombre premier|nombres premiers]] inférieurs à un certain [[entier naturel]] donné ''N''. Le [[crible d'Atkin]] est plus rapide mais plus complexe.
 
== Algorithme ==
On forme une table avec tous les entiers naturels compris entre 2 et ''N'' et on raye les uns après les autres, les entiers qui ne sont pas premiers de la manière suivante : dès que l'on trouve un entier qui n'a pas encore été rayé, il est déclaré premier, et on raye tous les autres multiples de celui-ci.
 
L'algorithme procède par élimination : il s'agit de supprimer d'une table des entiers de 2 à N tous les [[multiple (mathématiques)|multiples]] d'un entier (autres que lui-même).
 
En supprimant tous ces multiples, à la fin il ne restera que les entiers qui ne sont multiples d'aucun entier à part 1 et eux-mêmes, et qui sont donc les nombres premiers.
Étudions un exemple pour les entiers inférieurs à 120 :
[[Image:Animation_Sieb_des_Eratosthenes_mod.gif|center]]
 
On commence par rayer les multiples de 2, puis les multiples de 3 restants, puis les multiples de 5 restants, et ainsi de suite en rayant à chaque fois tous les multiples du plus petit entier restant.
 
On peut s'arrêter lorsque le carré du plus petit entier restant est supérieur au plus grand entier restant, car dans ce cas, tous les non-premiers ont déjà été rayés précédemment.
Déterminons pas à pas la liste de tous les [[nombre premier|nombres premiers]] inférieurs à 20 :
 
À la fin du processus, tous les entiers qui n'ont pas été rayés sont les nombres premiers inférieurs à N.
 
L'animation ci-dessous illustre le crible d'Ératosthène pour N=120 :
'''Étape 1.''' Écrivons la liste des [[nombre naturel|nombres naturels]] compris entre 2 et 20
[[Image:New Animation Sieve of Eratosthenes.gif|thumb|upright=2|center]]Remarque: si un nombre n est [[Nombre composé|composé]], alors n=n<sub>1</sub>n<sub>2</sub>, avec nécessairement l'un au moins des diviseurs n<sub>i</sub> plus petit que <math>\sqrt{n}</math>. C'est pourquoi dans le crible ci-dessus, pour chaque nombre premier trouvé, la suppression commence par le carré de celui-ci. À partir de 11, on devrait donc démarrer à 121=11², au-delà de la taille choisie 120, il n'y a donc plus aucune suppression après avoir trouvé les multiples de 7.
{| border="1" cellspacing="0" cellpadding="2"
|-----
| bgcolor="#d1c4ad" | 2 || bgcolor="#d1c4ad" | 3
| bgcolor="#d1c4ad" | 4
| bgcolor="#d1c4ad" | 5 || bgcolor="#d1c4ad" | 6
| bgcolor="#d1c4ad" | 7
| bgcolor="#d1c4ad" | 8 || bgcolor="#d1c4ad" | 9
| bgcolor="#d1c4ad" | 10
| bgcolor="#d1c4ad" | 11 || bgcolor="#d1c4ad" | 12
| bgcolor="#d1c4ad" | 13
| bgcolor="#d1c4ad" | 14 || bgcolor="#d1c4ad" | 15
| bgcolor="#d1c4ad" | 16
| bgcolor="#d1c4ad" | 17 || bgcolor="#d1c4ad" | 18
| bgcolor="#d1c4ad" | 19 || bgcolor="#d1c4ad" | 20
|}
 
== Exemples de mise en œuvre informatique ==
 
Le crible d'Ératosthène peut être mis en œuvre de façon classique ou [[Récursivité|récursive]], mais aussi sous la forme d'une [[Pipeline (architecture des processeurs)|méthode pipe-line]].
'''Étape 2.''' On marque le nombre suivant non rayé de la liste, comme premier.
{| border="1" cellspacing="0" cellpadding="2"
|-----
| bgcolor="#ff0000" | 2 || bgcolor="#d1c4ad" | 3
| bgcolor="#d1c4ad" | 4
| bgcolor="#d1c4ad" | 5 || bgcolor="#d1c4ad" | 6
| bgcolor="#d1c4ad" | 7
| bgcolor="#d1c4ad" | 8 || bgcolor="#d1c4ad" | 9
| bgcolor="#d1c4ad" | 10
| bgcolor="#d1c4ad" | 11 || bgcolor="#d1c4ad" | 12
| bgcolor="#d1c4ad" | 13
| bgcolor="#d1c4ad" | 14 || bgcolor="#d1c4ad" | 15
| bgcolor="#d1c4ad" | 16
| bgcolor="#d1c4ad" | 17 || bgcolor="#d1c4ad" | 18
| bgcolor="#d1c4ad" | 19 || bgcolor="#d1c4ad" | 20
|}
 
=== Pseudo-code ===
 
Dans une version classique, on transcrit ainsi l'algorithme :
''' Étape 3.''' On raye dans la liste, tous les multiples du nombre que l'on vient d'entourer.
{| border="1" cellspacing="0" cellpadding="2"
|-----
| bgcolor="#ff0000" | 2 || bgcolor="#d1c4ad" | 3
| <font color="#ff0000"><strike> 4 </strike></font>
| bgcolor="#d1c4ad" | 5
| <font color="#ff0000"><strike> 6 </strike></font>
| bgcolor="#d1c4ad" | 7
| <font color="#ff0000"><strike> 8 </strike></font>
| bgcolor="#d1c4ad" | 9
| <font color="#ff0000"><strike> 10 </strike></font>
| bgcolor="#d1c4ad" | 11
| <font color="#ff0000"><strike> 12 </strike></font>
| bgcolor="#d1c4ad" | 13
| <font color="#ff0000"><strike> 14 </strike></font>
| bgcolor="#d1c4ad" | 15
| <font color="#ff0000"><strike> 16 </strike></font>
| bgcolor="#d1c4ad" | 17
| <font color="#ff0000"><strike> 18 </strike></font>
| bgcolor="#d1c4ad" | 19
| <font color="#ff0000"><strike> 20 </strike></font>
|}
 
'''Fonction''' Eratosthène(Limite)
L = tableau de booléen de taille Limite, initialisé à Vrai
L[1] = Faux
'''Pour''' i de 2 à Limite
'''Si''' L[i]
'''Pour''' j de i*i à Limite par pas de i
''on peut commencer à i*i car tous les multiples de i inférieurs à i*i ont déjà été rayés''
L[j] = Faux
'''Fin pour'''
'''Fin si'''
'''Fin pour'''
'''Retourner''' L
'''Fin fonction'''
Comme dans l'animation ci-dessus, on peut optimiser le code précédent en arrêtant la boucle '''Pour''' i une fois <code>i*i>Limite</code> puisque l'on ne rentrera plus dans la boucle '''Pour''' j et en se contentant d'afficher les indices de L contenant Vrai.
'''Fonction''' Eratosthène(Limite)
L = tableau de booléen de taille Limite, initialisé à Vrai
L[1] = Faux
i=2
'''Tant que''' i*i≤Limite
'''Si''' L[i]
'''Pour''' j de i*i à Limite par pas de i
''on peut commencer à i*i car tous les multiples de i inférieurs à i*i ont déjà été rayés''
L[j] = Faux
'''Fin pour'''
'''Fin si'''
i=i+1
'''Fin tant que'''
'''Retourner''' L
'''Fin fonction'''
On peut aussi éviter de cocher plusieurs fois les nombres pairs et diviser le temps d'exécution par 2
'''Fonction''' Eratosthène(Limite)
L = tableau de booléen de taille Limite, initialisé à Vrai
Mettre à Faux les cases d'indice pair > 2
L[1] = Faux
i=3
'''Tant que''' i*i≤Limite
'''Si''' L[i]
'''Pour''' j de i*i à Limite par pas de 2*i
L[j] = Faux
'''Fin pour'''
'''Fin si'''
i=i+1
'''Fin tant que'''
'''Retourner''' L
'''Fin fonction'''
 
=== Version récursive ===
'''Étape 4.''' Si le carré du nombre suivant non rayé est inférieur à 20, alors on recommence à l'étape 2
{{section à sourcer}}
sinon on déclare tous les entiers restants non rayés premiers.
Le crible d'Ératosthène se code facilement avec une [[fonction récursive]], qu'il suffit d'appeler initialement avec le tableau des entiers de 2 à N.
 
Voici un pseudo code :
Puisque 3 élevé au carré est inférieur à 20, on retourne à l'étape 2 :
{| border="1" cellspacing="0" cellpadding="2"
|-----
| bgcolor="#ff0000" | 2 || bgcolor="#0000ff" | 3
| <font color="#ff0000"><strike> 4 </strike></font>
| bgcolor="#d1c4ad" | 5
| <font color="#ff0000"><strike> 6 </strike></font>
| bgcolor="#d1c4ad" | 7
| <font color="#ff0000"><strike> 8 </strike></font>
| <font color="#0000ff"><strike> 9 </strike></font>
| <font color="#ff0000"><strike> 10 </strike></font>
| bgcolor="#d1c4ad" | 11
| <font color="#ff0000"><strike> 12 </strike></font>
| bgcolor="#d1c4ad" | 13
| <font color="#ff0000"><strike> 14 </strike></font>
| <font color="#0000ff"><strike>15 </strike></font>
| <font color="#ff0000"><strike> 16 </strike></font>
| bgcolor="#d1c4ad" | 17
| <font color="#ff0000"><strike> 18 </strike></font>
| bgcolor="#d1c4ad" | 19
| <font color="#ff0000"><strike> 20 </strike></font>
|}
 
<pre>
FONCTION Eratosthène( entiers )
SI premier entier au carré > dernier entier
ALORS AFFICHE entiers
SINON
AFFICHE premier entier
EXECUTE Eratosthène( tous les entiers non multiples du premier entier )
FIN SI
FIN FONCTION
</pre>
 
=== Version pipe-line : le crible de [[Charles Antony Richard Hoare|Hoare]] (1978) ===
À l'étape 4, l'entier suivant non rayé 5 a un carré strictement supérieur à 20, on considère comme premiers tous les entiers suivants non rayés.
L'idée est d'engendrer chaque nombre à vérifier, pour le soumettre à un tri en cascade, ne conservant des entiers reçus que ceux qui sont premiers.
 
Pour cela, à chaque nombre premier repéré est associé un poste qui ne transmettra parmi ses successeurs que ceux qui ne sont pas ses multiples.
Résultat : Les entiers premiers compris entre 2 et 20 sont : 2, 3, 5, 7, 11, 13, 17, 19.
 
Ce système n'utilise pas de table ou de liste de nombres à traiter ''a priori'', mais à tout moment ''un poste'' (cellule active ou ''[[coroutine]]'') ''par nombre premier déjà reconnu''.
Pour obtenir les entiers premiers inférieurs à N=99, on raye dans l'ordre tous les multiples des nombres premiers p=2, 3, 5, 7, … à partir de <math>p^2</math> jusqu'à N.
<pre>
On s'arrête lorsque l'entier premier p suivant vérifie <math>p^2>N</math> (Si un entier non premier est strictement supérieur à <math>\sqrt{N}</math> alors il a au moins un diviseur inférieur à <math>\sqrt{N}</math> et aura donc déjà été rayé). On va donc aller jusqu'à p=9, parce que 10<sup>2</sup>=100>99, et déclarer premiers tous les entiers non rayés suivants. On obtient la table suivante :
Crible de C.A.R HOARE :
{| bgcolor="#c0c0c0" border="1" cellspacing="0" cellpadding="2"
|-----
| <font color="yellow"><strike> 0 </strike></font>
| <font color="yellow"><strike> 1 </strike></font>
| bgcolor="#0000ff" | 2 || bgcolor="#ff0000" | 3
| <font color="#0000ff"><strike> 4 </strike></font>
| bgcolor="#deff7d" | 5
| <font color="#0000ff"><strike> 6 </strike></font>
| bgcolor="#de7fff" | 7
| <font color="#0000ff"><strike> 8 </strike></font>
| <font color="#ff0000"><strike> 9 </strike></font>
|-----
| <font color="#0000ff"><strike> 10 </strike></font>
| bgcolor="#1571ff" | 11
| <font color="#0000ff"><strike> 12 </strike></font>
| bgcolor="#15ff8c" | 13
| <font color="#0000ff"><strike> 14 </strike></font>
| <font color="#ff0000"><strike> 15 </strike></font>
| <font color="#0000ff"><strike> 16 </strike></font>
| bgcolor="#92ba8c" | 17
| <font color="#0000ff"><strike> 18 </strike></font>
| bgcolor="#92008c" | 19
|-----
| <font color="#0000ff"><strike> 20 </strike></font>
| <font color="#ff0000"><strike> 21 </strike></font>
| <font color="#0000ff"><strike> 22 </strike></font>
| bgcolor="#b04f6f" | 23
| <font color="#0000ff"><strike> 24 </strike></font>
| <font color="#deff7d"><strike> 25 </strike></font>
| <font color="#0000ff"><strike> 26 </strike></font>
| <font color="#ff0000"><strike> 27 </strike></font>
| <font color="#0000ff"><strike> 28 </strike></font>
| bgcolor="#b04fe6" | 29
|-----
| <font color="#0000ff"><strike> 30 </strike></font>
| bgcolor="#b0ffe6" | 31
| <font color="#0000ff"><strike> 32 </strike></font>
| <font color="#ff0000"><strike> 33 </strike></font>
| <font color="#0000ff"><strike> 34 </strike></font>
| <font color="#deff7d"><strike> 35 </strike></font>
| <font color="#0000ff"><strike> 36 </strike></font>
| bgcolor="#1f99d5" | 37
| <font color="#0000ff"><strike> 38 </strike></font>
| <font color="#ff0000"><strike> 39 </strike></font>
|-----
| <font color="#0000ff"><strike> 40 </strike></font>
| bgcolor="#ad26d5" | 41
| <font color="#0000ff"><strike> 42 </strike></font>
| bgcolor="#deabd5" | 43
| <font color="#0000ff"><strike> 44 </strike></font>
| <font color="#ff0000"><strike> 45 </strike></font>
| <font color="#0000ff"><strike> 46 </strike></font>
| bgcolor="#1fffff" | 47
| <font color="#0000ff"><strike> 48 </strike></font>
| <font color="#de7fff"><strike> 49 </strike></font>
|-----
| <font color="#0000ff"><strike> 50 </strike></font>
| <font color="#ff0000"><strike> 51 </strike></font>
| <font color="#0000ff"><strike> 52 </strike></font>
| bgcolor="#ffff23" | 53
| <font color="#0000ff"><strike> 54 </strike></font>
| <font color="#deff7d"><strike> 55 </strike></font>
| <font color="#0000ff"><strike> 56 </strike></font>
| <font color="#ff0000"><strike> 57 </strike></font>
| <font color="#0000ff"><strike> 58 </strike></font>
| bgcolor="#ffe09d" | 59
|-----
| <font color="#0000ff"><strike> 60 </strike></font>
| bgcolor="#f9cdff" | 61
| <font color="#0000ff"><strike> 62 </strike></font>
| <font color="#ff0000"><strike> 63 </strike></font>
| <font color="#0000ff"><strike> 64 </strike></font>
| <font color="#deff7d"><strike> 65 </strike></font>
| <font color="#0000ff"><strike> 66 </strike></font>
| bgcolor="#f9cd15" | 67
| <font color="#0000ff"><strike> 68 </strike></font>
| <font color="#ff0000"><strike> 69 </strike></font>
|-----
| <font color="#0000ff"><strike> 70 </strike></font>
| bgcolor="#5affbc" | 71
| <font color="#0000ff"><strike> 72 </strike></font>
| bgcolor="#7f7fe2" | 73
| <font color="#0000ff"><strike> 74 </strike></font>
| <font color="#ff0000"><strike> 75 </strike></font>
| <font color="#0000ff"><strike> 76 </strike></font>
| <font color="#de7fff"><strike> 77 </strike></font>
| <font color="#0000ff"><strike> 78 </strike></font>
| bgcolor="#51964f" | 79
|-----
| <font color="#0000ff"><strike> 80 </strike></font>
| <font color="#ff0000"><strike> 81 </strike></font>
| <font color="#0000ff"><strike> 82 </strike></font>
| bgcolor="#ff9782" | 83
| <font color="#0000ff"><strike> 84 </strike></font>
| <font color="#deff7d"><strike> 85 </strike></font>
| <font color="#0000ff"><strike> 86 </strike></font>
| <font color="#ff0000"><strike> 87 </strike></font>
| <font color="#0000ff"><strike> 88 </strike></font>
| bgcolor="#0077c0" | 89
|-----
| <font color="#0000ff"><strike> 90 </strike></font>
| <font color="#de7fff"><strike> 91 </strike></font>
| <font color="#0000ff"><strike> 92 </strike></font>
| <font color="#ff0000"><strike> 93 </strike></font>
| <font color="#0000ff"><strike> 94 </strike></font>
| <font color="#deff7d"><strike> 95 </strike></font>
| <font color="#0000ff"><strike> 96 </strike></font>
| bgcolor="#00cbcb" | 97
| <font color="#0000ff"><strike> 98 </strike></font>
| <font color="#ff0000"><strike> 99 </strike></font>
|}
 
Un GENERATEUR passe chaque entier de 2 à N au premier poste disponible(qu'il crée s'il n'existe pas).
== Le crible d'Eratosthène codé en C ==
Voici ce que donne le crible d'Eratosthène codé en C (seule la fonction qui permet de calculer les nombres premiers est affichée ici)
* Remarque : le tableau "tableau" de nombres entiers (entre 2 et N) doit être créé et rempli avant l'utilisation de cette fonction
 
Pour chaque POSTE créé :
<source lang='C'>
* il conserve le premier entier qu'il reçoit, disons p,
1 void premiers(long tableau[], long tailleTableau)
* puis il transmet au poste suivant (créé si besoin) tout entier reçu n non divisible par p.
2 {
</pre>
3 int i = 0, y = 0;
Ainsi :
4 long diviseur = 0;
*2 crée le poste 2
5
*3 passe le poste 2 et crée le poste 3
6
*4 est intercepté par le poste 2
7 for (i = 0 ; i < sqrt(tailleTableau) ; i++)
*5 passe les postes 2 et 3, et crée le poste 5
8 {
*6 est intercepté par le poste 2
9 if (tableau[i] != 0)
*7 passe les postes 2, 3, 5, et crée le poste 7
10 {
*...
11 diviseur = tableau[i];
*36 est intercepté par le poste 2,
12
*37 passe les postes 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, et crée le poste 37...
13 for (y = (i+1) ; y < tailleTableau ; y ++)
14 if ((tableau[y]%diviseur) == 0)
15 tableau[y] = 0;
16
17 }
18 }
19
20
21 for (i = 0 ; i < tailleTableau ; i++)
22 if (tableau[i] != 0)
23 printf ("%ld ", tableau[i]);
24 }
 
En régime de croisière, '''''ce crible commence à vérifier la primalité de nouveaux nombres pendant qu'il poursuit ou achève la vérification de la primalité de nombres précédents'''''.
</source>
 
Nous noterons, qu'à moins de disposer d'une machine parallèle avec <math>\sqrt{n}</math> processeurs, cette méthode est inefficace puisque chaque poste parcourt un nombre d'entiers de l'ordre de n.
* Lignes 3 à 4 : Déclaration des variables nécessaires ("i" et "y" pour parcourir le tableau "tableau" et "diviseur" pour tester si un nombre est premier ou pas).
* Ligne 9 : On vérifie si on a pas déjà supprimé le nombre, si ce n'est pas le cas on continue, sinon, on passe au nombre suivant.
* Ligne 11 : On associe à la variable "diviseur" la valeur du nombre présent à l'emplacement "y" du tableau "tableau".
* Lignes 13 à 16 : On regarde si les nombres qui suivent l'emplacement initial d'"y" divisés par "diviseur" forment un reste nul ou pas. S'ils forment un reste nul, ils ne sont pas premiers, on les raye.
* Lignes 21 à 23 : Si le nombre situé à l'emplacement "y" du tableau "tableau" n'est pas rayé (égal à zéro), on l'affiche.
 
== Notes et références ==
{{Références}}
C. A. R. Hoare, ''Communicating sequential processes'', CACM 21 (1978) {{p.|666-677}}
 
Κόσκινον Ερατοσθένους ''or, The Sieve of Eratosthenes. Being an Account of His Method of Finding All the Prime Numbers'', by the Rev. Samuel Horsley, F. R. S.,
Philosophical Transactions (1683-1775), Vol. 62. (1772), {{p.|327-347}}.
 
== Annexes ==
Ou plus simplement et efficacement:
=== Articles connexes ===
<source lang='C'>
*[[Crible de Sundaram]]
1 void premiers(int tableau[], long tailleTableau)
2 {
3 long i, j;
4
5 tableau[0] = tableau[1] = 0;
6 for (i = 2 ; i < tailleTableau ; i++) tableau[i] = 1;
7
8 for (i = 2 ; i < sqrt(tailleTableau) ; i++)
9 if (tableau[i])
10 for (j = i*i ; j < tailleTableau ; j += i)
11 tableau[j] = 0;
12
13 for (i = 0 ; i < tailleTableau ; i++)
14 if (tableau[i]) printf ("%d ", i);
15
16 }
</source>
 
* ligne 1 : le tableau n'est pas censé être initialisé. tableau[i] contiendra 1 si i est premier, 0 sinon.
* ligne 5 : 0 et 1 ne sont pas premiers
* ligne 6 : les nombres > 2 sont premiers jusqu'à preuve du contraire.
* ligne 9,10,11 : si i est premier, on marque tous ses multiples comme non premiers :i*2, i*3, ... jusqu'à n. On commence en fait à i*i puisque les i*k avec k < i ont déjà été eliminés en tant que multiples de k.
 
== Notes et Références ==
{{références}}
Κοσκινον Ερατοσθενους ''or, The Sieve of Eratosthenes. Being an Account of His Method of Finding All the Prime Numbers'', by the Rev. Samuel Horsley, F. R. S.,
Philosophical Transactions (1683-1775), Vol. 62. (1772), pp. 327-347.
 
== Liens internes ==
*[[Crible d'Atkin]]
*[[Spirale d'Ulam]]
*[[Nombre chanceux]]
*[[Divisions successives]]
*[[Densité asymptotique|Densité]]
 
=== Liens externes ===
* [http://legeneraliste.perso.sfr.fr/?p=prems Implémentation en C# d'une optimisation du crible d'Ératosthène]
*[http://www.faust.fr.bw.schule.de/mhb/eratosiv.htm Animation interactive] (JavaScript)
* [http://wwwinterstices.cut-the-knot.orginfo/Curriculum/Arithmetic/Eratosthenes.shtmlcrible-eratosthene], Cribledes applets java simulant le crible d'Ératosthène] (Java)
* [http://pagesperso-orange.fr/therese.eveilleau/pages/truc_mat/pratique/textes/crible_an.htm Le crible d'Ératosthène]
 
{{Portail|arithmétique|informatique mathématiquesthéorique}}
 
[[Catégorie:Test de primalité]]
[[Catégorie:Nombre premier]]
[[Catégorie:Théorie des cribles]]
 
[[bg:Решето на Ератостен]]
[[ca:Sedàs d'Eratòstenes]]
[[cs:Eratosthenovo síto]]
[[de:Sieb des Eratosthenes]]
[[en:Sieve of Eratosthenes]]
[[eo:Kribrilo de Eratosteno]]
[[es:Criba de Eratóstenes]]
[[fi:Eratostheneen seula]]
[[he:הנפה של ארטוסתנס]]
[[hr:Eratostenovo sito]]
[[hu:Eratoszthenész szitája]]
[[id:Saringan Eratosthenes]]
[[it:Crivello di Eratostene]]
[[ja:エラトステネスの篩]]
[[ka:ერატოსთენეს საცერი]]
[[lt:Eratosteno rėtis]]
[[mk:Ератостеново сито]]
[[nl:Zeef van Eratosthenes]]
[[pl:Sito Eratostenesa]]
[[pt:Crivo de Eratóstenes]]
[[ru:Решето Эратосфена]]
[[scn:Criveddu d'Eratòstini]]
[[simple:Sieve of Eratosthenes]]
[[sk:Eratostenovo sito]]
[[sl:Eratostenovo sito]]
[[sr:Ератостеново сито]]
[[sv:Eratosthenes såll]]
[[tr:Eratosten kalburu]]
[[zh:埃拉托斯特尼筛法]]