ANDRZEJ RYNGWELSKI
3.3 Przesiewanie liczb pierwszych
DOWIESZ SIĘ
Zawsze warto szukać sposobu na uproszczenie i skrócenie obliczeń. W przypadku poszukiwania liczb pierwszych taki sposób znalazł Eratostenes (ten sam uczony po raz pierwszy wyznaczył z niezłą dokładnością promień Ziemi). Podczas tej lekcji zastosujesz wymyślony przez niego algorytm.
SITO ERATOSTENESA
Poprzednia lekcja została poświęcona wyszukiwaniu liczb pierwszych. Obliczeń było sporo, bo dla każdej kolejnej liczby należało sprawdzić, czy jest ona podzielna przez którąś z liczb od 2 do… Do jakiej liczby? Warunek zakończenia poszukiwania dzielników w pętli powtarzaj aż wyglądał następująco:
dzielnik * dzielnik > liczba.
Dlaczego? Zauważ, że jeśli sprawdza się np. liczbę 16, to gdy znajdzie się dzielnik 2, to oczywiście dzielnikiem jest również 16/2, czyli 8. Następny dzielnik, tj. 4, podniesiony do kwadratu daje 16. Kolejnych dzielników nie warto szukać, bo są one wynikiem dzielenia liczby 16 przez poprzednio znalezione. To spostrzeżenie oszczędza obliczeń.
Sposób Eratostenesa polega na odsiewaniu całych grup liczb, np. liczb parzystych (z wyjątkiem 2), liczb podzielnych przez 3 (z wyjątkiem 3) itd. Przyjrzyj się, jak to działa.
że nie każdy prosty algorytm jest optymalny i że liczba obliczeń w algorytmie ma istotne znaczenie dla jego realizacji, jak zaprogramować w Scratchu sito Eratostenesa.
1. Najpierw należy wypisać wszystkie liczby w podanym zakresie, np. od 1 do 100.
2. Potem należy wykreślić jedynkę, bo ma ona tylko jeden dzielnik.
3. Teraz pora na liczby podzielne przez 2 (z wyjątkiem 2). W ten sposób wykreśla się (odsiewa) prawie połowę liczb, którymi już nie trzeba się zajmować.
4. Dalej należy kolejno wykreślić liczby podzielne przez 3 (z wyjątkiem 3).
5. Liczba 4 została już odsiana, więc następna jest piątka.
WSiPnet » E-podręcznik » Informatyka https://app.wsipnet.pl/podreczniki/strona/157228
Tego odsiewania było wyraźnie mniej niż obliczeń, które wykonywał program z poprzedniej lekcji.
LISTA KROKÓW I JEJ REALIZACJA W SCRATCHU
Utwórz w Scratchu projekt realizujący sito Eratostenesa dla liczb z zakresu od 1 do 100. Kieruj się opisanymi niżej krokami, które trzeba wykonać.
Rys. 1. Wykreślanie liczby 1 oraz wielokrotności liczb 2, 3 i 5
6. Zostało jeszcze odsianie liczb podzielnych przez 7 (z wyjątkiem 7), czyli 49, 77 i 91 – i zostaną wyłącznie liczby pierwsze.
Weź liczby naturalne od 1 do 100.
W Scratchu: utwórz listę Liczby i wypełnij ją liczbami od 1 do 100, utwórz pomocniczą zmienną liczba.
WSiPnet » E-podręcznik » Informatyka https://app.wsipnet.pl/podreczniki/strona/157228
Rys. 2. Tworzenie listy Liczby – skrypt zielonej flagi
Wykreśl 1.
W Scratchu: zamień 1 na liście na X.
Powtarzaj od 2 do liczby, której kwadrat jest większy od wybranego zakresu: weź kolejną niewykreśloną liczbę i wykreśl jej wielokrotności.
W Scratchu: utwórz zmienną dzielnik i ustaw ją na 2; powtarzaj, aż dzielnik do kwadratu będzie większy niż zakres: jeżeli element listy równy dzielnikowi nie jest równy X, to usuń jego wielokrotności i zmień dzielnik o 1.
WSiPnet » E-podręcznik » Informatyka https://app.wsipnet.pl/podreczniki/strona/157228
Rys. 3. Skrypt wykreślający liczby (1 i wielokrotności 2, 3, 5, 7)
Wykreślanie wielokrotności. Powtarzaj do końca zakresu liczb: jeżeli liczba nie jest wykreślona oraz liczba jest podzielna przez dzielnik, ale nie równa dzielnikowi, to wykreśl liczbę.
W Scratchu: zdefiniuj nowy blok Usuń wielokrotności wywoływany z parametrem dzielnik.
WSiPnet » E-podręcznik » Informatyka https://app.wsipnet.pl/podreczniki/strona/157228
Rys. 4. Skrypt bloku Usuń wielokrotności i wynik jego działania na liście Liczby
Liczby pierwsze w praktyce
Poszukiwanie liczb pierwszych nie jest tylko zabawą. Wielkie liczby pierwsze znajdują zastosowanie m.in. w bankowości (przy szyfrowaniu połączeń internetowych). Oparta jest na nich najpopularniejsza obecnie metoda szyfrowania – RSA.
ZADANIA
1. Sito Eratostenesa jest popularnym algorytmem. Obejrzyj w serwisie Scratcha projekty innych użytkowników, które mają w tytule „sito”.
2. Na podstawie analizy dzielników liczby utwórz projekt wypisujący wszystkie liczby z zakresu od 1 do 100, które mają nieparzystą liczbę dzielników.
3. Zmodyfikuj jeden z projektów wyszukiwania liczb pierwszych (z tej lub z poprzedniej lekcji), tak aby znaleźć liczby pierwsze z zakresu od 1 do 1000.
WSiPnet » E-podręcznik » Informatyka https://app.wsipnet.pl/podreczniki/strona/157228