Algorytm Euklidesa i Sito Eratostenesa – klasyka, która działa do dziś


1. Wstęp – matematyka, która przetrwała 2000 lat

W czasach, gdy nie było komputerów, ludzie też musieli liczyć – tylko robili to głową, kredą albo patykiem na piasku.
Nie mieli kalkulatorów, ale mieli genialne pomysły, które dziś nazywamy algorytmami.

Dwóch starożytnych matematyków – Euklides i Eratostenes – opracowało metody, które do dziś są podstawą programowania.
Ich algorytmy były tak przemyślane, że w XXI wieku nadal uczymy ich uczniów informatyki.
Zobaczmy, dlaczego.


Algorytm Euklidesa

O co chodzi?

Algorytm Euklidesa służy do znajdowania największego wspólnego dzielnika (NWD) dwóch liczb.
Czyli: jaka liczba „dzieli” obie bez reszty?

Przykład:
NWD(20, 12) = 4
bo 4 dzieli i 20, i 12.


3. Jak to odkrył Euklides

Ponad 2000 lat temu Euklides zauważył prostą zasadę:

Jeśli od większej liczby odejmiemy mniejszą –
to największy wspólny dzielnik się nie zmienia.

Czyli:

NWD(a, b) = NWD(a - b, b)

Dopóki jedna z liczb nie stanie się zerem, powtarzamy odejmowanie.
Wtedy druga liczba to właśnie NWD.


4. Wersja prostsza – z resztą z dzielenia

Współczesna wersja jest krótsza:

NWD(a, b) = NWD(b, a mod b)

Czyli dzielimy a przez b, bierzemy resztę z dzielenia,
i powtarzamy, aż reszta wyniesie 0.


5. Przykład krok po kroku

Znajdź NWD(48, 18):

48 mod 18 = 12      → NWD(18, 12)
18 mod 12 = 6       → NWD(12, 6)
12 mod 6 = 0        → KONIEC
Wynik: 6

Największy wspólny dzielnik to 6.


6. Algorytm Euklidesa w Pythonie

Wersja iteracyjna:

def nwd(a, b):
    while b != 0:
        a, b = b, a % b
    return a

print("NWD(48, 18) =", nwd(48, 18))

Wersja rekurencyjna:

def nwd_rek(a, b):
    if b == 0:
        return a
    else:
        return nwd_rek(b, a % b)

print("NWD(48, 18) =", nwd_rek(48, 18))

Wynik:

NWD(48, 18) = 6

7. Gdzie to się przydaje

  • uproszczenie ułamków (np. 12/18 → 2/3),
  • kryptografia (szyfrowanie RSA),
  • obliczenia w fizyce i chemii (np. proporcje),
  • algorytmy z największym wspólnym dzielnikiem w tle (np. NWW).

Sito Eratostenesa

Kim był Eratostenes

Eratostenes z Cyreny żył w III wieku p.n.e.
Był matematykiem, astronomem i bibliotekarzem w Aleksandrii.
Jako pierwszy obliczył obwód Ziemi (i pomylił się tylko o 1%)!
Ale zasłynął z czegoś prostszego – sposobu znajdowania liczb pierwszych.


9. Co to jest liczba pierwsza

Liczba pierwsza to taka, która dzieli się tylko przez 1 i samą siebie.
Na przykład:
2, 3, 5, 7, 11, 13, 17…


10. Pomysł Eratostenesa

Eratostenes wymyślił genialnie prostą metodę:
zamiast próbować dzielić każdą liczbę po kolei, usuwał te, które mają dzielniki.


11. Zasada działania sita

  1. Zapisz wszystkie liczby od 2 do n.
  2. Wybierz pierwszą liczbę, która nie jest skreślona – to liczba pierwsza.
  3. Skreśl wszystkie jej wielokrotności (czyli 2×p, 3×p, 4×p itd.).
  4. Powtarzaj, aż dojdziesz do końca listy.

Pozostałe liczby to liczby pierwsze.


12. Sito Eratostenesa w Pythonie

To właśnie zadanie, które masz już na stronie:
👉 Sito Eratostenesa – zadanie

Poniżej wersja edukacyjna kodu z opisem:

def sito_eratostenesa(n):
    liczby = [True] * (n + 1)
    liczby[0] = liczby[1] = False

    for i in range(2, int(n**0.5) + 1):
        if liczby[i]:
            for j in range(i*i, n + 1, i):
                liczby[j] = False

    for i in range(2, n + 1):
        if liczby[i]:
            print(i, end=" ")

sito_eratostenesa(50)

Wynik:

2 3 5 7 11 13 17 19 23 29 31 37 41 43 47

13. Dlaczego to jest „sito”

Bo „odsiewa” liczby złożone, zostawiając tylko pierwsze –
tak jak sitko w kuchni oddziela makaron od wody. 🍝


14. Wspólna idea z algorytmem Euklidesa

Choć Euklides i Eratostenes żyli ponad 2000 lat temu, ich pomysły są pierwszymi przykładami algorytmicznego myślenia:

  • oba dzielą problem na mniejsze kroki,
  • oba wykonują powtarzalne operacje,
  • oba mają koniec, gdy spełniony jest warunek (reszta 0 lub koniec listy).

To dokładnie to, czego dziś uczymy w programowaniu: pętli, warunków, rekurencji i efektywności.


15. Zadania dla ucznia

Zadanie 1 – NWD

  1. Napisz program, który wczytuje dwie liczby i oblicza ich NWD metodą Euklidesa.
  2. Dodaj wersję rekurencyjną i sprawdź, czy daje ten sam wynik.
  3. Rozszerz program tak, by obliczał NWW (najmniejszą wspólną wielokrotność) według wzoru:
    NWW(a, b) = a * b / NWD(a, b)

Zadanie 2 – Liczby pierwsze

  1. Skopiuj kod sita Eratostenesa i zmień zakres na 100.
  2. Zlicz, ile liczb pierwszych mieści się w tym zakresie.
  3. Dodaj opcję, by program zapisywał wyniki do pliku pierwsze.txt.

Zadanie 3 – Połącz oba algorytmy
Napisz program, który:

  • wypisuje wszystkie liczby pierwsze z przedziału,
  • a potem dla każdej pary sąsiednich liczb pierwszych oblicza ich NWD.

16. Podsumowanie

AlgorytmCo robiKluczowa idea
EuklidesaSzuka największego wspólnego dzielnikapowtarzaj dzielenie, aż reszta = 0
Eratostenesa (sito)Szuka liczb pierwszycheliminuj wielokrotności liczb pierwszych

Oba pokazują, że prosty pomysł może być bardziej skuteczny niż złożone wzory.


17. Do zapamiętania

Wielcy matematycy nie mieli komputerów, ale myśleli jak programiści:
krok po kroku, aż do prostego, logicznego rozwiązania.


18. Dla wzrokowców

ALGORYTM EUKLIDESA
48, 18
→ 48 % 18 = 12
→ 18 % 12 = 6
→ 12 % 6 = 0 → KONIEC (NWD = 6)

SITO ERATOSTENESA (do 30)
[2,3,4,5,6,7,8,9,10,11,12...]
skreślamy wielokrotności 2,3,5...
→ zostają: [2,3,5,7,11,13,17,19,23,29]