Sito Eratostenesa - jak działa algorytm
Ideą algorytmu sita Eratostenesa jest wykrycie i usunięcie (wykreślenie) z zadanego przedziału liczb złożonych, zaczynając od wielokrotności liczby 2. Liczby złożone są wielokrotnościami liczb pierwszych. Jeżeli ze zbioru liczb naturalnych wykreślimy liczby złożone, pozostaną wyłącznie liczby pierwsze.
Dany jest przedział liczb naturalnych . Znajdź wszystkie liczby pierwsze zawarte w tym przedziale. Problem rozważmy dla .
Specyfikacja problemu:
Dane:
Zbiór liczb naturalnych z przedziału
n– liczba naturalna
Wyniki:
liczby pierwsze z przedziału
Przeanalizujemy działanie algorytmu dla . Wybieramy liczbę najmniejszą (2). Następnie wykreślamy wszystkie liczby będące jej wielokrotnościami (4, 6, 8, 10, 12…, 30).
Otrzymujemy następujący zbiór:
Z pozostałych liczb wybieramy najmniejszą niewykreśloną liczbę (3). Usuwamy jej wszystkie wielokrotności (6, 9, 12, 15, 18, 21, 24, 27, 30). Oczywiście część z tych wielokrotności została już usunięta.
Otrzymujemy następujący zbiór:
Czynność powtarzamy, dopóki liczba, której wielokrotności wykreślamy, jest nie większa niż pierwiastek z liczby . W naszym przypadku , więc właściwy pierwiastek to .
Po wykreśleniu wielokrotności liczby 5 otrzymamy zbiór:
W tym momencie zakończymy algorytm. Nie będziemy usuwać wielokrotności liczby 7, ponieważ jak wiemy . Zbiór zawiera wszystkie liczby pierwsze z zakresu od 2 do 30.
Algorytm zapisany za pomocą pseudokodu
Napiszmy teraz algorytm sita Eratostenesa za pomocą pseudokodu.
Zaczynamy od zadeklarowania zmiennej n oraz n-elementowej tablicy. Przyjmujemy, że indeksy tablicy odpowiadają kolejnym liczbom naturalnym z analizowanego przedziału. Na początku zakładamy, że wszystkie liczby są pierwsze i dlatego każdemu z elementów przypiszemy wartość prawda. Wykreślanie będzie polegało na zmianie wartości wykreślanego elementu z wartości prawda na fałsz. Indeksy tablicy odpowiadające elementom o wartości prawda to poszukiwane liczby pierwsze.
Następnie tworzymy pętlę dla, w której będziemy sprawdzać czy element kryjący się w tablicy pod indeksem i ma wartość true. Jeżeli tak, wówczas w wewnętrznej pętli będziemy wykreślać wielokrotności indeksu tego elementu.
Iterator zewnętrznej pętli (i) będzie przyjmował wartości . Deklarujemy zmienną j. Tak jak wspomnieliśmy, jej zadaniem będzie wskazanie indeksu wykreślanego elementu, czyli kolejnych wielokrotności liczby i. Inicjalizujemy ją kwadratem liczby i. Zostanie przez nas wykorzystana w wewnętrznej pętli dopóki. Wewnątrz pętli wyznaczamy kolejne wielokrotności liczby i, dodając jej wartość do zmiennej j. Wewnętrzną pętle przerywamy, kiedy wielokrotność i, zapisana w zmiennej j, będzie większa od ustalonego rozmiaru sita.
Ostatnim krokiem jest wypisanie liczb pierwszych.
Kompletny algorytm sita Eratostenesa zapisany za pomocą pseudokodu:
W przedstawionym algorytmie Sita Eratostenesa w pętli dla... wykonuj zastosowaliśmy warunek i <= pierwiastek(n). Gdy obie strony nierówności i <= pierwiastek(n) podniesiemy do kwadratu, otrzymamy i * i <= n. Tego warunku możesz używać w swoich implementacjach sita Eratostenesa: i * i <= n.
Słownik
grecki matematyk, filozof i astronom; wyznaczył obwód Ziemi oraz oszacował odległość Ziemi od Słońca
gałąź wiedzy, która zajmuje się zabezpieczaniem informacji przed niepowołanym dostępem
liczba naturalna większa od 1, która dzieli się tylko przez jeden i przez samą siebie
matematyczny sposób sprawdzenia autentyczności dokumentów i wiadomości elektronicznych
algorytm wyznaczania liczb pierwszych z zadanego przedziału <2, n> – jego autorstwo jest przypisywane greckiemu matematykowi Eratostenesowi z Cyreny, który żył w III w. p.n.e.