Wróć do informacji o e-podręczniku Wydrukuj Pobierz materiał do PDF Pobierz materiał do EPUB Pobierz materiał do MOBI Zaloguj się, aby dodać do ulubionych Zaloguj się, aby skopiować i edytować materiał Zaloguj się, aby udostępnić materiał Zaloguj się, aby dodać całą stronę do teczki

Sito EratostenesaEratostenesEratostenesa jest algorytmem znajdującym w danym przedziale wszystkie liczby pierwsze. Liczby pierwsze znajdują zastosowanie w kryptografiikryptografiakryptografii, m.in. w szyfrze RSA. Z powodu trudności w rozkładzie dużych liczb na czynniki pierwsze, algorytm RSA jest bezpieczny, a co za tym idzie – często stosowany w szyfrowaniu, a także przy tworzeniu podpisów cyfrowychpodpis cyfrowypodpisów cyfrowych. Więcej na ten temat dowiesz się z e‑materiału Szyfr RSAPl0GrlFTpSzyfr RSA.

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.

Problem 1

Dany jest przedział liczb naturalnych < 2 , n >. Znajdź wszystkie liczby pierwsze zawarte w tym przedziale. Problem rozważmy dla n=30.

Specyfikacja problemu:

Dane:

  • Zbiór liczb naturalnych z przedziału < 2 , n >

  • n – liczba naturalna

Wyniki:

  • liczby pierwsze z przedziału < 2 , n >

Przeanalizujemy działanie algorytmu dla n=30. 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:

2, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29

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:

2, 3, 5, 7, 11, 13, 17, 19, 23, 25, 29

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:

2, 3, 5, 7, 11, 13, 17, 19, 23, 29

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.

Linia 1. n znak równości wprowadź liczbę naturalną. Linia 3. T otwórz nawias kwadratowy n zamknij nawias kwadratowy znak równości tablica wartości logicznych. Linia 5. dla s znak równości 2 przecinek 3 przecinek kropka kropka kropka n wykonuj dwukropek. Linia 6. T otwórz nawias kwadratowy s zamknij nawias kwadratowy znak równości prawda.

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.

Linia 1. n znak równości wprowadź liczbę naturalną. Linia 3. T otwórz nawias kwadratowy n zamknij nawias kwadratowy znak równości tablica wartości logicznych. Linia 5. dla s znak równości 2 przecinek 3 przecinek kropka kropka kropka n wykonuj dwukropek. Linia 6. T otwórz nawias kwadratowy s zamknij nawias kwadratowy znak równości prawda. Linia 8. dla i znak równości 2 przecinek 3 przecinek kropka kropka kropka otwórz nawias ostrokątny znak równości pierwiastek otwórz nawias okrągły n zamknij nawias okrągły wykonuj dwukropek. Linia 9. jeżeli T otwórz nawias kwadratowy i zamknij nawias kwadratowy znak równości znak równości prawda wykonaj dwukropek. Linia 10. j znak równości i asterysk i. Linia 11. dopóki j otwórz nawias ostrokątny znak równości n wykonuj dwukropek. Linia 12. T otwórz nawias kwadratowy j zamknij nawias kwadratowy znak równości fałsz. Linia 13. j znak równości j plus i.

Ostatnim krokiem jest wypisanie liczb pierwszych.

Kompletny algorytm sita Eratostenesa zapisany za pomocą pseudokodu:

Linia 1. n znak równości wprowadź liczbę naturalną. Linia 3. T otwórz nawias kwadratowy n zamknij nawias kwadratowy znak równości tablica wartości logicznych. Linia 5. dla s znak równości 2 przecinek 3 przecinek kropka kropka kropka n wykonuj dwukropek. Linia 6. T otwórz nawias kwadratowy s zamknij nawias kwadratowy znak równości prawda. Linia 8. dla i znak równości 2 przecinek 3 przecinek kropka kropka kropka otwórz nawias ostrokątny znak równości pierwiastek otwórz nawias okrągły n zamknij nawias okrągły wykonuj dwukropek. Linia 9. jeżeli T otwórz nawias kwadratowy i zamknij nawias kwadratowy znak równości znak równości prawda wykonaj dwukropek. Linia 10. j znak równości i asterysk i. Linia 11. dopóki j otwórz nawias ostrokątny znak równości n wykonuj dwukropek. Linia 12. T otwórz nawias kwadratowy j zamknij nawias kwadratowy znak równości fałsz. Linia 13. j znak równości j plus i. Linia 15. dla a znak równości 2 przecinek 3 przecinek kropka kropka kropka n wykonuj dwukropek. Linia 16. jeżeli T otwórz nawias kwadratowy a zamknij nawias kwadratowy znak równości znak równości prawda dwukropek. Linia 17. wypisz a.
Ważne!

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.

Linia 1. n znak równości wprowadź liczbę naturalną. Linia 3. T otwórz nawias kwadratowy n zamknij nawias kwadratowy znak równości tablica wartości logicznych. Linia 5. dla s znak równości 2 przecinek 3 przecinek kropka kropka kropka n wykonuj dwukropek. Linia 6. T otwórz nawias kwadratowy s zamknij nawias kwadratowy znak równości prawda. Linia 8. i znak równości 2. Linia 10. dopóki i asterysk i otwórz nawias ostrokątny znak równości n wykonuj dwukropek. Linia 11. jeżeli T otwórz nawias kwadratowy i zamknij nawias kwadratowy znak równości znak równości prawda wykonaj dwukropek. Linia 12. j znak równości i asterysk i. Linia 13. dopóki j otwórz nawias ostrokątny znak równości n wykonuj dwukropek. Linia 14. T otwórz nawias kwadratowy j zamknij nawias kwadratowy znak równości fałsz. Linia 15. j znak równości j plus i. Linia 16. i znak równości i plus 1. Linia 18. dla a znak równości 2 przecinek 3 przecinek kropka kropka kropka n wykonuj dwukropek. Linia 19. jeżeli T otwórz nawias kwadratowy a zamknij nawias kwadratowy znak równości znak równości prawda dwukropek. Linia 20. wypisz a.

Schemat blokowy algorytmu

RTNLxs9u3KEXm
Źródło: Contentplus.pl Sp. z o.o., licencja: CC BY-SA 3.0.

Słownik

Eratostenes
Eratostenes

grecki matematyk, filozof i astronom; wyznaczył obwód Ziemi oraz oszacował odległość Ziemi od Słońca

kryptografia
kryptografia

gałąź wiedzy, która zajmuje się zabezpieczaniem informacji przed niepowołanym dostępem

liczba pierwsza
liczba pierwsza

liczba naturalna większa od 1, która dzieli się tylko przez jeden i przez samą siebie

podpis cyfrowy
podpis cyfrowy

matematyczny sposób sprawdzenia autentyczności dokumentów i wiadomości elektronicznych

sito Eratostenesa
sito Eratostenesa

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.