Przykład implementacji sita Eratostenesa w języku Python

Linia 1. def sito podkreślnik eratostenesa podkreślnik for otwórz nawias okrągły n zamknij nawias okrągły dwukropek. Linia 2. from math import sqrt. Linia 3. lista podkreślnik liczb znak równości otwórz nawias kwadratowy zamknij nawias kwadratowy. Linia 4. lista znak równości otwórz nawias kwadratowy 0 zamknij nawias kwadratowy plus otwórz nawias okrągły n asterysk otwórz nawias kwadratowy 1 zamknij nawias kwadratowy zamknij nawias okrągły. Linia 5. max podkreślnik liczba znak równości int otwórz nawias okrągły sqrt otwórz nawias okrągły n zamknij nawias okrągły zamknij nawias okrągły. Linia 6. for indeks in range otwórz nawias okrągły 2 przecinek max podkreślnik liczba plus 1 zamknij nawias okrągły dwukropek. Linia 7. if lista otwórz nawias kwadratowy indeks zamknij nawias kwadratowy dwukropek. Linia 8. for indeks podkreślnik 2 in range otwórz nawias okrągły indeks asterysk indeks przecinek n plus 1 przecinek indeks zamknij nawias okrągły dwukropek. Linia 9. lista otwórz nawias kwadratowy indeks podkreślnik 2 zamknij nawias kwadratowy znak równości 0. Linia 11. for element in range otwórz nawias okrągły 2 przecinek n plus 1 zamknij nawias okrągły dwukropek. Linia 12. if lista otwórz nawias kwadratowy element zamknij nawias kwadratowy dwukropek. Linia 13. lista podkreślnik liczb kropka append otwórz nawias okrągły element zamknij nawias okrągły. Linia 15. print otwórz nawias okrągły lista podkreślnik liczb zamknij nawias okrągły.

Najważniejsze elementy przedstawionego kodu:

  • obiekt lista_liczb będzie wynikową listą liczb pierwszychliczba pierwszaliczb pierwszych w przeszukiwanym zakresie;

  • indeksy obiektu lista są reprezentacją zbioru liczb naturalnych z zakresu [0, n]. Początkowo wszystkie elementy traktowane są jako liczby „pierwsze” i mają wartość 1 (poza elementem o indeksie 0). Później (zgodnie z algorytmem) niektóre z nich będziemy eliminować („wykreślać”), zastępując je zerami;

  • zmienna max_liczba ma wartość pierwiastka kwadratowego z n, który określa górną granicę liczby, której wielokrotność wykreślamy. Zgodnie z algorytmem pierwsza pętla działa od liczby 2 do pierwiastka z liczby n (więc jako argumenty funkcji range() musimy wpisać range(2, max_liczba+1) ).

Jeśli podczas wykonywania pętli wartość elementu lista[indeks] (linia nr 7) będzie wynosić 1 (element będzie liczbą pierwszą), wówczas w wewnętrznej pętli usuwamy jej wielokrotności.

Na końcu sprawdzamy wszystkie elementy obiektu lista. Liczbami pierwszymi są indeksy elementów o wartości 1. Dopisujemy je do obiektu lista_liczb, a wynik wypisujemy.

Efekt działania programu dla liczb z zakresu od 2 do 120:

Linia 1. sito podkreślnik eratostenesa podkreślnik for otwórz nawias okrągły 120 zamknij nawias okrągły. Linia 2. otwórz nawias kwadratowy 2 przecinek 3 przecinek 5 przecinek 7 przecinek 11 przecinek 13 przecinek 17 przecinek 19 przecinek 23 przecinek 29 przecinek 31 przecinek 37 przecinek 41 przecinek 43 przecinek 47 przecinek 53 przecinek. Linia 3. 59 przecinek 61 przecinek 67 przecinek 71 przecinek 73 przecinek 79 przecinek 83 przecinek 89 przecinek 97 przecinek 101 przecinek 103 przecinek 107 przecinek 109 przecinek 113 zamknij nawias kwadratowy.
1
Problem 1

Możemy wprowadzić pewne elementy modyfikujące działanie funkcji. Spróbujmy zdefiniować funkcję sito_eratostenesa_for(n) w taki sposób, aby dla n < 2 nie próbowała ona nic obliczać, ale zwracała wartość False.

RkdszwTRhKGOy
Wybierz jedno nowe słowo poznane podczas dzisiejszej lekcji i ułóż z nim zdanie.

Słownik

liczba pierwsza
liczba pierwsza

liczba naturalna większa od 1, mająca tylko dwa dzielniki – 1 oraz siebie samą

pętla zagnieżdżona
pętla zagnieżdżona

pętla, która znajduje się wewnątrz innej pętli