Dowiedz się, jak przyspieszyć swoje programy. Opanuj szukanie dzielników do pierwiastka, rozkład na czynniki pierwsze, Sito Eratostenesa i konwersję systemów liczbowych.
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.
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.
True, zakładając wstępnie, że wszystkie liczby są pierwsze.False) wszystkie jej wielokrotności.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]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.
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.
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'
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ę!