0Pricing
Competitive Programming Academy · Lekcja

Testowanie pierwszości do sqrt(n)

Wydajne sprawdzanie pojedynczej liczby

Testowanie pierwszości do sqrt(n) to bezpłatna lekcja Competitive Programming Academy na CoddyKit. To lekcja 2 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Competitive Programming Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Competitive Programming Academy zawiera 4 lekcji w sumie.

Pytanie o liczby pierwsze

Podstawową umiejętnością matematyczną jest sprawdzenie, czy pojedyncza liczba jest pierwsza. Liczba pierwsza ma dokładnie dwa dzielniki: jeden i samą siebie. Sprawdźmy to szybko. 🔍

Naiwne sprawdzanie

Można próbować dzielić n przez każdą liczbę od 2 do n minus 1. To poprawne rozwiązanie, ale boleśnie wolne, gdy n jest duże.

Sposób z pierwiastkiem kwadratowym

Kluczowy wniosek jest następujący: wystarczy sprawdzać dzielniki do pierwiastka kwadratowego z n. Powyżej tej wartości nie może pojawić się żaden nowy czynnik.

Dlaczego wystarczy pierwiastek

Dzielniki występują w parach, których iloczyn jest równy n. Gdyby oba były większe od pierwiastka kwadratowego, ich iloczyn przekroczyłby n, co jest niemożliwe.

Granica pętli

Należy iterować po i od 2, dopóki i razy i pozostaje mniejsze lub równe n. Użycie i*i pozwala uniknąć błędów zmiennoprzecinkowych funkcji sqrt dla dużych liczb całkowitych.

while i * i <= n:
    ...

Obsługa małych przypadków

Liczby mniejsze od 2 nigdy nie są pierwsze, dlatego należy odrzucić je na początku. Taki warunek ochronny sprawia, że główna pętla pozostaje przejrzysta i poprawna.

if n < 2:
    return False

Pełna funkcja

Należy połączyć wszystkie elementy: odrzucić małe wartości, a następnie sprawdzać potencjalne dzielniki aż do pierwiastka. Każde dzielenie bez reszty oznacza, że n jest złożone.

def is_prime(n):
    if n < 2:
        return False
    i = 2
    while i * i <= n:
        if n % i == 0:
            return False
        i += 1
    return True

Przyspieszenie

Najpierw należy osobno sprawdzić 2, a następnie testować tylko liczby nieparzyste. Pomijanie liczb parzystych mniej więcej połowę pracy bez dodatkowej złożoności.

if n % 2 == 0:
    return n == 2

Koszt czasowy

Ten test działa w czasie O(sqrt n). Dla pojedynczej liczby nie większej niż miliard to tylko około 30 000 prostych operacji.

Jedna liczba, nie wiele

Test z pierwiastkiem sprawdza się doskonale dla jednego lub kilku zapytań. Jeśli potrzebne jest sprawdzenie pierwszości całego zakresu, znacznie szybszy będzie algorytm sita.

Unikanie pułapki pierwiastka

Porównywanie z i*i zamiast użycia math.sqrt pozwala uniknąć błędów zaokrągleń, które mogą nieprawidłowo uznać graniczną liczbę za pierwszą lub złożoną.

Szybkie sprawdzenie

Proszę przypomnieć sobie granicę, która sprawia, że ten test jest szybki.

Podsumowanie

Można już sprawdzać pierwszość jednej liczby w czasie O(sqrt n), odrzucać małe wartości, pomijać liczby parzyste i używać i*i, aby zachować dokładność. ✅

Często zadawane pytania

Czy lekcja „Testowanie pierwszości do sqrt(n)” jest bezpłatna?

Tak — pełny tekst „Testowanie pierwszości do sqrt(n)” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Competitive Programming Academy, przejdź na CoddyKit PRO. Kurs Competitive Programming Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Testowanie pierwszości do sqrt(n)”?

Wydajne sprawdzanie pojedynczej liczby Ćwiczysz Competitive Programming Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć Competitive Programming Academy?

Nie wymagamy żadnego doświadczenia. Competitive Programming Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 2 z 4.

Ile czasu zajmuje lekcja „Testowanie pierwszości do sqrt(n)”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji Competitive Programming Academy?

Tak. Każda lekcja Competitive Programming Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. NWD, NWW i algorytm Euklidesa
  2. Testowanie pierwszości do sqrt(n)
  3. Sito Eratostenesa
  4. Rozkład na czynniki pierwsze i dzielniki
← Powrót do Competitive Programming Academy