Sito Eratostenesa


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,…

 2345678910
11121314151617181920
21222324252627282930
31323334353637383940
41424344454647484950
51525354555657585960

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.

 2345678910
11121314151617181920
21222324252627282930
31323334353637383940
41424344454647484950
51525354555657585960

Według tej samej procedury postępujemy dla liczby 5.

 2345678910
11121314151617181920
21222324252627282930
31323334353637383940
41424344454647484950
51525354555657585960

Następnie dla 7 aż do sprawdzenia wszystkich niewykreślonych wcześniej liczb.

 2345678910
11121314151617181920
21222324252627282930
31323334353637383940
41424344454647484950
51525354555657585960

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.

 2345678910
11121314151617181920
21222324252627282930
31323334353637383940
41424344454647484950
51525354555657585960

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.