Algorytm Sito Eratostenesa
Ze zbioru liczb naturalnych z przedziału [2,n] tj. {2,3,4,…,n} wybieramy najmniejszą, czyli 2, i wykreślamy wszystkie jej wielokrotności większe od niej samej, to jest 4,6,8,…
2 | 3 | 5 | 7 | 9 | |||||
11 | 13 | 15 | 17 | 19 | |||||
21 | 23 | 25 | 27 | 29 | |||||
31 | 33 | 35 | 37 | 39 | |||||
41 | 43 | 45 | 47 | 49 | |||||
51 | 53 | 55 | 57 | 59 |
Z pozostałych liczb wybieramy najmniejszą niewykreśloną liczbę (3) i usuwamy wszystkie jej wielokrotności większe od niej samej: 6,9,12,… przy czym nie przejmujemy się tym, że niektóre liczby (na przykład 6 czy 12) będą skreślane więcej niż raz.
2 | 3 | 5 | 7 | ||||||
11 | 13 | 17 | 19 | ||||||
23 | 25 | 29 | |||||||
31 | 35 | 37 | |||||||
41 | 43 | 47 | 49 | ||||||
53 | 55 | 59 |
Według tej samej procedury postępujemy dla liczby 5.
2 | 3 | 5 | 7 | ||||||
11 | 13 | 17 | 19 | ||||||
23 | 29 | ||||||||
31 | 37 | ||||||||
41 | 43 | 47 | 49 | ||||||
53 | 59 |
Następnie dla 7 aż do sprawdzenia wszystkich niewykreślonych wcześniej liczb.
2 | 3 | 5 | 7 | ||||||
11 | 13 | 17 | 19 | ||||||
23 | 29 | ||||||||
31 | 37 | ||||||||
41 | 43 | 47 | |||||||
53 | 59 |
Wykreślanie powtarzamy do momentu, gdy liczba i której wielokrotność wykreślamy, będzie większa niż pierwiastek(n)
Dla danej liczby n wszystkie niewykreślone liczby mniejsze, bądź równe n są liczbami pierwszymi.
2 | 3 | 5 | 7 | ||||||
11 | 13 | 17 | 19 | ||||||
23 | 29 | ||||||||
31 | 37 | ||||||||
41 | 43 | 47 | |||||||
53 | 59 |
Powyższy algorytm można zapisać w postaci następującego pseudokodu
Wejście: liczba całkowita n > 1
Niech A będzie tablicą typów logicznych indeksowaną liczbami całkowitymi od 2 do n
początkowo wypełniona wartościami true
for i := 2, 3, 4, …, nie więcej niż pierwiastek(n)
if A[i] = true:
for j := 2*i, 3*i, 4*i, …, nie więcej niż n :
A[j] := false
Wyjście: wartości i takie, że A[i] zawiera wartość true.