Se scrie o listă a numerelor de la 2 la cel mai mare număr ce urmează a fi testat pentru primalitate. Numim această listă lista A. (Lista de pătrate din partea stângă a imaginii.)
Se trece numărul 2, primul număr prim găsit, într-o altă listă, cea a numerelor prime găsite. Numim această listă lista B. (Este lista din partea dreaptă a imaginii.)
Se marchează 2 și toți multiplii lui 2 din lista A.
Primul număr nemarcat din listă este un număr prim. Se trece acest număr în lista B.
Se marchează acest număr și toți multiplii lui din lista A. Marcarea de multipli poate să înceapă de la pătratul numărului, întrucât multiplii mai mici au fost deja marcați în pașii anteriori.
Se repetă pașii 4 și 5 până când se epuizează toate numerele din lista A.
Complexitatea algoritmului și alte detalii
Marcarea multiplilor unui număr prim poate începe de la pătratul acelui număr, deoarece multiplii mai mici au fost deja marcați.
Complexitatea în timp a algoritmului este de și cea în spațiu este de .[1] Versiunea segmentată a ciurului lui Eratostene, cu optimizări elementare, cum ar fi factorizarea pe roată, utilizează operațiuni și biți de memorie.[2]
prime = ciur [2..]
ciur (p : xs) = p : ciur [x | x <− xs, x ‘mod‘ p > 0]
Totuși, Melissa O'Neill[4]
a arătat că complexitatea implementării funcționale a lui Turner este semnificativ mai mare decât cea a implementărilor în limbaje imperative.
Note
^Pritchard, Paul. Linear prime-number sieves: a family tree. Sci. Comput. Programming9:1 (1987). pp. 17–35.
^Turner, David A. (). SASL language manual. Tech. rept. CS/75/1. Department of Computational Science, Universitatea St. Andrews.
^O'Neill, Melissa E., "The Genuine Sieve of Eratosthenes", Journal of Functional Programming, Published online by Cambridge University Press 9 octombrie 2008 doi:10.1017/S0956796808007004.