Teoria liczb, Sito Eratostenesa i Systemy
Dowiedz się, jak przyspieszyć swoje programy. Opanuj szukanie dzielników do pierwiastka, rozkład na czynniki pierwsze, Sito Eratostenesa i konwersję systemów liczbowych.
Zadania z liczb pierwszych wracają w arkuszach w dwóch odsłonach: sprawdź, czy jedna duża liczba jest pierwsza, oraz wypisz wszystkie liczby pierwsze z przedziału. W obu punkty za efektywność zależą od tego samego chwytu — pętla idzie tylko do pierwiastka z badanej liczby, a przy całym przedziale zamiast sprawdzania liczba po liczbie wchodzi sito. Ten sam pierwiastek ogranicza rozkład na czynniki pierwsze. Na zajęciach zaczynamy od wersji nieoptymalnej, czyli pętli do n. Dopiero potem pokazujemy, że wystarczy iść do pierwiastka — i przy okazji tłumaczymy, czym w ogóle jest złożoność obliczeniowa.
- Optymalizacja czasu: Magia pierwiastka kwadratowego
Kiedy CKE każe sprawdzić, czy ogromna liczba (np. z rzędu miliardów) jest liczbą pierwszą, naiwne sprawdzenie wszystkich dzielników w pętli od 2 do to samobójstwo. Twój program przekroczy limit czasu (zazwyczaj 1 sekunda), a punkty za efektywność po prostu przepadną.
💡 Złota zasada maturalna:
Dzielniki zawsze występują w parach. Jeśli liczba dzieli się przez , to dzieli się również przez , gdzie . Jeden z tych dzielników z pewnością jest mniejszy lub równy .
Wniosek? Pętlę szukającą dzielników wystarczy uruchomić tylko do pierwiastka kwadratowego z badanej liczby! Oszczędzasz miliony niepotrzebnych iteracji.
- Sito Eratostenesa – Fabryka liczb pierwszych
Gdy musisz wygenerować wszystkie liczby pierwsze w szerokim przedziale (np. od 1 do miliona), sprawdzanie każdej liczby osobną funkcją to strata czasu. Do gry wkracza starożytny, ale potężny algorytm – Sito Eratostenesa.
Jak działa Sito?
- Tworzymy długą listę wartości
True, zakładając wstępnie, że wszystkie liczby są pierwsze. - Bierzemy pierwszą prawdziwą liczbę pierwszą (2) i "wykreślamy" (zmieniamy na
False) wszystkie jej wielokrotności. - Przechodzimy do kolejnej niewykreślonej liczby (3) i powtarzamy proces.
- Algorytm możemy bezpiecznie zatrzymać, gdy dojdziemy do pierwiastka z górnego zakresu!
Pythonowa implementacja Sita:
def sito_eratostenesa(n):
# Tablica wartości True (indeksy odpowiadają liczbom)
pierwsze = [True] * (n + 1)
pierwsze[0] = pierwsze[1] = False
# Przeszukujemy tylko do pierwiastka z n!
for i in range(2, int(n**0.5) + 1):
if pierwsze[i]:
# Wykreślamy wielokrotności zaczynając od i*i
for j in range(i * i, n + 1, i):
pierwsze[j] = False
# Zwracamy listę zachowanych liczb
return [x for x in range(n + 1) if pierwsze[x]]
print(sito_eratostenesa(30))
# Wynik: [2, 3, 5, 7, 11, 13, 17, 19, 23, 29]
- Rozkład liczby na czynniki pierwsze
Każdą liczbę złożoną można zapisać jako unikalny iloczyn liczb pierwszych. Ten algorytm jest sercem zadań z NWD (Największym Wspólnym Dzielnikiem) i skracaniem ułamków.
Zamiast kombinować i najpierw generować liczby pierwsze, robimy to sprytniej w czasie – po prostu dzielimy liczbę przez najmniejszy możliwy dzielnik dopóki się da, a gdy się nie da, zwiększamy dzielnik.
Zadanie
Przeanalizuj proces rozkładu na czynniki pierwsze dla liczby . Zapisz, jakie wartości lądują na liście czynników w poszczególnych krokach pętli.
💡 Pokaż rozwiązanie krok po kroku▼
- Systemy liczbowe (Pythonowy Cheat-sheet)
Na maturze non-stop przeliczasz wartości między systemem binarnym, dziesiętnym i szesnastkowym. Oczywiście, możesz ręcznie pisać algorytm Hornera, ale Python posiada genialne, wbudowane narzędzia, które załatwiają to w jednej linijce!
Używaj potężnej funkcji int("string", podstawa).
int("1010", 2) # Zwróci 10
int("FF", 16) # Zwróci 255
Używaj funkcji bin(liczba). Zwraca ona string z przedrostkiem '0b'.
bin(10) # '0b1010'
bin(10)[2:] # Odcina '0b'
Używaj funkcji hex(liczba). Zwraca string z przedrostkiem '0x'.
hex(255) # '0xff'
hex(255)[2:].upper() # 'FF'
Zestaw algorytmów wracających w arkuszach, z gotowym kodem i wyjaśnieniem, kiedy który wybrać.
Korepetycje z informatyki
Zdajesz maturę rozszerzoną z informatyki?
Prowadzimy indywidualne przygotowanie do matury z informatyki — algorytmy, Python i C++, bazy danych i arkusz kalkulacyjny. Zajęcia online, na arkuszach CKE. Zobacz program i cennik.
Zobacz korepetycje z informatykiUczysz się w technikum informatycznym? Prowadzimy też przygotowanie do kwalifikacji INF.02, INF.03 i INF.04. Zobacz egzaminy zawodowe →
Nadal czujesz się niepewnie?
To tylko jeden z pewniaków. Na kursie przechodzimy przez nie wszystkie, krok po kroku, aż poczujesz ten spokój.
Pomóżcie mi zdać maturę!