Sito Eratostenesa – algorytm wyznaczania wszystkich liczb pierwszych mniejszych od danej, czyli z zadanego przedziału . Opiera się na eliminacji liczb złożonych.

Jest przypisywany Eratostenesowi z Cyreny, najpóźniej od XVIII wieku Jeff Miller, Sieve of Eratosthenes, [w:] Earliest Known Uses of Some of the Words of Mathematics (S) , MacTutor History of Mathematics archive, University of St Andrews, mathshistory.st-andrews.ac.uk [dostęp 2023-06-10]..

Własności sita Eratostenesa mogą być użyte do oszacowania wartości funkcji pi (π) – dowodu nierówności zrobił to w 1808 roku Adrien-Marie Legendre Eratosthenes, sieve of , Encyclopedia of Mathematics, encyclopediaofmath.org [dostęp 2023-06-10]..

Algorytm ten udoskonalono; powstały bardziej wydajne jak sito Atkina.

Algorytm Ze zbioru liczb naturalnych z przedziału tj. wybieramy najmniejszą, czyli 2, i wykreślamy wszystkie jej wielokrotności poczynając od jej kwadratu to jest   2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60

Z pozostałych liczb wybieramy najmniejszą niewykreśloną liczbę (3) i wykreślamy wszystkie jej wielokrotności poczynając od czyli: (przy czym niektóre liczby będą skreślane więcej niż raz, np. 18 jako wielokrotność 2 i wielokrotność 3).   2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60

Według tej samej procedury postępujemy dla liczby 5, wykreślając   2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60

Następnie dla 7 wykreślamy:   2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60

Wykreślanie powtarzamy do momentu, gdy kolejna wybrana liczba będzie większa niż ponieważ pierwsza "kandydatka" do skreślenia będzie już poza zbiorem:

Wszystkie liczby z które nie zostały wykreślone, są liczbami pierwszymi.   2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60

Powyższy algorytm można zapisać w postaci następującego pseudokodu:

Wejście: liczba całkowita n > 1

Niech A będzie tablicą wartości logicznych indeksowaną liczbami całkowitymi od 2 do n początkowo wypełniona wartościami true

for i := 2, 3, 4, ..., nie większe niż if A[i] = true: for j := i*i, i*(i+1), i*(i+2), ..., nie większe niż n : A[j] := false

Wyjście: wartości i takie, że A[i] zawiera wartość true. Np. w języku Python: def sito_eratostenesa(n): if n < 2: return []

# Wstępnie oznaczamy wszystkie liczby pierwsze = [True] * (n + 1)

# Eliminujemy 0 i 1 pierwsze = pierwsze = False

# Eliminujemy wielokrotności kolejnych liczb pierwszych for i in range(2, int(n ** 0.5) + 1): if pierwsze[i]: for j in range(i * i, n + 1, i): pierwsze[j] = False

return [i for i in range(n + 1) if pierwsze[i]]

# Przykład użycia: print(sito_eratostenesa(50)) Przypisy

Linki zewnętrzne Animacja sita Eratostenesa

Kategoria:Algorytmiczna teoria liczb Kategoria:Liczby pierwsze Kategoria:Teoria podzielności