Jak szybko działa sito?
Jedną z najlepiej znanych metod wyznaczania liczb pierwszych jest sito Eratostenesa. Opiera się ona na spostrzeżeniu, w zasadzie oczywistym, że jak wyrzucimy wszystkie liczby złożone, to zostaną same liczby pierwsze...

Jeśli chcemy wyznaczyć wszystkie liczby pierwsze nieprzekraczające
wypisujemy na kartce liczby naturalne od 1 do
wykreślamy 1,
bo nie jest pierwsza, zostawiamy 2 i wykreślamy wszystkie jej wielokrotności,
potem zostawiamy 3 i wykreślamy wszystkie jej wielokrotności (niektóre,
np. 6, już zostały wykreślone) i tak dalej. W kolejnym kroku pozostawiamy
pierwszą niewykreśloną liczbę i wykreślamy jej wielokrotności. Liczby,
które nie zostaną wykreślone, to wszystkie liczby pierwsze nie większe od
W tym artykule zastanowimy się nad tym, jak szybkie jest sito Eratostenesa. Najczęstszą operacją wykonywaną w tym algorytmie jest wykreślanie.
Za pomocą każdej liczby pierwszej wykreślimy, rzecz jasna, co najwyżej
liczb złożonych, wobec czego wykonamy łącznie co najwyżej
operacji.
Zauważmy, że możemy zakończyć wykreślanie, gdy rozpatrzymy liczby
pierwsze od 2 do
Faktycznie: każda liczba złożona z zakresu
od 4 do
musi mieć jakiś dzielnik pierwszy nie większy niż
W ten sposób otrzymujemy wariant algorytmu sita działający
w czasie
Okazuje się, że możemy uzyskać jeszcze lepsze oszacowanie złożoności
czasowej. W tym celu w ogóle nie musimy zmieniać zasady działania
algorytmu – wystarczy bardziej precyzyjnie oszacować liczbę wykreśleń.
Oznaczmy przez
kolejne liczby pierwsze nieprzekraczające
Wówczas łączna liczba wykreśleń to co najwyżej
![]() | (*) |
Tę sumę możemy oszacować z góry przez


Czytelnik Wytrawny dostrzeże w powyższej sumie
-tą liczbę harmoniczną
i od razu stwierdzi, że przecież
Można
to także sprawdzić, jeśli narysuje się
prostokątów o szerokości 1
i wysokościach kolejno
itd., a także wykresy
funkcji
i
(rysunek ). Wówczas suma pól
prostokątów – równa co do wartości liczbie
– jest nie mniejsza
niż pole pod wykresem funkcji
dla
a zatem:

Podobnie,
możemy oszacować z góry przez
plus pole pod
wykresem
dla
czyli:

W ten sposób wykazaliśmy, że złożoność sita Eratostenesa to
Co ciekawe, można otrzymać jeszcze lepsze
oszacowanie, jeśli tylko dokładniej przyjrzeć się sumie
i wykorzystać
pewien znany fakt z teorii liczb.
Oznaczmy przez
liczbę liczb pierwszych nieprzekraczających liczby
Kluczowy fakt to:
asymptotycznie zachowuje się tak, jak
Nie będziemy tego faktu dowodzić. Korzystając z niego,
wnioskujemy, że
-ta liczba pierwsza,
średnio jest
rzędu
To pozwala nam zapisać sumę
w postaci
równoważnej asymptotycznie sumy:

Podobnie jak poprzednio,
-tą część tej sumy możemy asymptotycznie
przybliżać całką:

a tę z kolei oszacować z góry przez całkę z prostszym ograniczeniem górnym:

Ostatnią z powyższych całek wyznaczamy przez podstawienie
:

W ten sposób otrzymaliśmy asymptotyczne oszacowanie sumy
przez
funkcję
co pozwala stwierdzić, że złożoność sita
Eratostenesa to
Czytelnik nielubiący manipulować takimi całkami może otrzymać podobnie
dobre oszacowania, jeśli tylko spojrzy na algorytm sita z nieco innej strony.
Otóż każda liczba złożona między
a
zostanie wykreślona
tyle razy, ile ma różnych czynników pierwszych w rozkładzie. Dla liczby
całkowitej dodatniej
oznaczmy przez
liczbę różnych
dzielników pierwszych liczby
Łatwo wykazać, że zawsze
Faktycznie, jeśli
przy czym wszystkie liczby
są
pierwsze, to
skąd
więc tym bardziej
W ten sposób łatwo uzasadniliśmy, że łączna liczba
wykreśleń jest rzędu
Niestety, tą metodą trudniej jest
dojść do lepszego z wcześniejszych oszacowań, tj.
Metodę sita możemy jeszcze trochę usprawnić. Zauważmy, że za pomocą danej
liczby pierwszej
nie większej od
wystarczy wykreślać
liczby złożone począwszy od
gdyż wszystkie wcześniejsze
wielokrotności
musiały zostać wykreślone wcześniej. Taka
poprawka nie zmienia jednak złożoności czasowej algorytmu.
Na koniec warto wspomnieć, że w algorytmie sita Eratostenesa cały zakres
liczb od
do
możemy podzielić na kawałki długości
i wykreślać liczby złożone tylko w takich kawałkach.
To pozwala nam zredukować rozmiar tablicy używanej do wykreślania do
wartości rzędu
co ma niebagatelne znaczenie tak teoretyczne,
jak i praktyczne. Więcej na ten temat można znaleźć w artykule
Tomasza Idziaszka ,,Kolejność ma znaczenie" z Delty 9/2011.