Przejdź do treści

Artykuł · Matematyka

Ewolucja metod generowania liczb pierwszych

Od sita Eratostenesa po testy probabilistyczne, na których opiera się dzisiejsza kryptografia.

Opublikowano Aktualizacja ok. 10 minut czytania

Liczby pierwsze należą do najbardziej fundamentalnych obiektów w matematyce. To właśnie one stanowią cegiełki, z których zbudowana jest cała arytmetyka – każdą liczbę naturalną większą od 1 można jednoznacznie rozłożyć na iloczyn liczb pierwszych. Ta pozornie prosta własność ma daleko idące konsekwencje zarówno w czystej matematyce, jak i we współczesnej technologii.

Od starożytnych Greków, którzy odkryli pierwsze metody ich wyznaczania, po współczesnych kryptografów chroniących nasze dane w internecie – generowanie liczb pierwszych pozostaje jednym z najważniejszych problemów obliczeniowych. Przez ponad dwa tysiące lat ludzkość opracowywała coraz sprytniejsze algorytmy, które pozwalają znajdować liczby pierwsze szybciej i w coraz większych zakresach.

W tym artykule prześledzisz ewolucję tych metod – od prostego sita Eratostenesa po zaawansowane testy probabilistyczne i deterministyczne algorytmy XXI wieku. Jeśli interesuje Cię praktyczne zastosowanie liczb pierwszych, sprawdź nasz generator liczb pierwszych, który pozwala wygenerować liczby pierwsze z wybranego zakresu.

Początki: sito Eratostenesa

Najstarszą znaną metodą systematycznego znajdowania liczb pierwszych jest sito Eratostenesa, przypisywane greckiemu matematykowi Eratostenesowi z Cyreny, żyjącemu w III wieku p.n.e. Pomimo swojego wieku algorytm ten pozostaje jednym z najelegantszych rozwiązań w historii matematyki i wciąż jest stosowany w praktyce do generowania liczb pierwszych w umiarkowanych zakresach.

Zasada działania sita jest intuicyjna i opiera się na eliminacji. Wypisujemy wszystkie liczby od 2 do zadanej granicy, a następnie kolejno usuwamy wielokrotności każdej znalezionej liczby pierwszej. To, co pozostaje po zakończeniu procesu, to kompletna lista liczb pierwszych w danym zakresie.

Złożoność obliczeniowa sita Eratostenesa wynosi O(n log log n), co czyni je wydajnym narzędziem do generowania wszystkich liczb pierwszych w zakresach do kilkudziesięciu milionów. Problemem staje się jednak zużycie pamięci – algorytm wymaga przechowywania tablicy o rozmiarze n. Dla bardzo dużych zakresów opracowano warianty segmentowe, które przetwarzają dane blokami i zużywają znacznie mniej pamięci.

Przez kolejne stulecia sito Eratostenesa pozostawało podstawową metodą tworzenia list liczb pierwszych. Dopiero rozwój teorii liczb w XVII i XVIII wieku otworzył drogę do zupełnie nowych podejść, opartych na właściwościach algebraicznych i probabilistycznych.

Od testów podzielności do twierdzenia o liczbach pierwszych

Przez wieki test podzielności był najprostszą metodą sprawdzania, czy dana liczba jest pierwsza. Polega on na dzieleniu badanej liczby n przez wszystkie liczby od 2 do pierwiastka z n. Jeśli żadna z nich nie dzieli n bez reszty, liczba jest pierwsza. Metoda ta jest intuicyjna, ale staje się niewykonalnie wolna dla dużych liczb – liczba operacji rośnie proporcjonalnie do pierwiastka z n.

Przełom nastąpił w XVII wieku, gdy matematycy zaczęli odkrywać głębsze własności liczb pierwszych. Ich prace nie tylko poszerzyły wiedzę teoretyczną, ale stworzyły podwaliny pod współczesne algorytmy testowania pierwszości.

  1. 1640

    Pierre de Fermat

    Formułuje małe twierdzenie Fermata: jeśli p jest liczbą pierwszą, to ap−1 mod p = 1 dla każdego a niepodzielnego przez p. To twierdzenie stało się podstawą pierwszych testów probabilistycznych.

  2. 1737

    Leonhard Euler

    Rozwija prace Fermata i wiąże liczby pierwsze z analizą matematyczną. Jego iloczyn dla funkcji zeta pokazuje głęboki związek między liczbami pierwszymi a strukturą liczb naturalnych.

  3. ok. 1792

    Carl Friedrich Gauss

    Jako piętnastolatek zauważa, że liczba liczb pierwszych mniejszych od n jest w przybliżeniu równa n / ln(n). To przybliżenie, znane jako twierdzenie o liczbach pierwszych, udowodniono dopiero w 1896 roku.

  4. 1859

    Bernhard Riemann

    Publikuje pracę o funkcji zeta Riemanna i stawia hipotezę Riemanna, jeden z najważniejszych nierozwiązanych problemów matematyki, bezpośrednio związany z rozkładem liczb pierwszych.

Twierdzenie o liczbach pierwszych odpowiada na pytanie, jak gęsto występują liczby pierwsze wśród liczb naturalnych. Okazuje się, że im dalej posuwamy się na osi liczbowej, tym rzadziej pojawiają się liczby pierwsze, ale nigdy się nie kończą – Euklides udowodnił nieskończoność zbioru liczb pierwszych w „Elementach” około 300 roku p.n.e. Te odkrycia matematyczne miały fundamentalne znaczenie dla późniejszego rozwoju algorytmów generowania i testowania pierwszości.

Algorytmy probabilistyczne

W drugiej połowie XX wieku rozwój informatyki i kryptografii wymusił poszukiwanie metod testowania pierwszości, które byłyby znacznie szybsze od dotychczasowych. Odpowiedzią stały się algorytmy probabilistyczne – metody, które z bardzo wysokim, ale nie stuprocentowym prawdopodobieństwem określają, czy badana liczba jest pierwsza.

Najprostszym testem probabilistycznym jest test Fermata, oparty bezpośrednio na małym twierdzeniu Fermata. Jeśli dla losowo wybranej podstawy a zachodzi an−1 mod n = 1, liczba n prawdopodobnie jest pierwsza. Problem polega na istnieniu tzw. liczb Carmichaela – liczb złożonych, które przechodzą test Fermata dla każdej podstawy względnie pierwszej z n. Najmniejszą taką liczbą jest 561 = 3 · 11 · 17.

W 1977 roku Robert Solovay i Volker Strassen zaproponowali ulepszony test Solovaya-Strassena, wykorzystujący symbol Jacobiego. Eliminuje on problem liczb Carmichaela, ale pojedyncza runda myli się z prawdopodobieństwem do 1/2, więc trzeba ją powtarzać częściej niż w kolejnym teście.

Prawdziwym standardem stał się test Millera-Rabina, opracowany przez Gary'ego Millera w 1976 roku i udoskonalony przez Michaela Rabina w 1980 roku. Przy k powtórzeniach testu z losowymi podstawami prawdopodobieństwo błędnego uznania liczby złożonej za pierwszą wynosi co najwyżej 4−k. Dla k = 20 szansa pomyłki jest mniejsza niż 1 na bilion – w praktyce jest to pewność wystarczająca nawet dla zastosowań kryptograficznych.

Jeśli chcesz sprawdzić, czy konkretna liczba jest pierwsza, skorzystaj z kalkulatora liczb pierwszych. Używa on testu Millera-Rabina z takim zestawem podstaw, że dla liczb do 20 cyfr wynik jest pewny.

Rewolucja komputerowa i algorytmy deterministyczne

Choć testy probabilistyczne doskonale sprawdzają się w praktyce, matematycy od lat poszukiwali algorytmu, który testowałby pierwszość deterministycznie (z absolutną pewnością) i jednocześnie działałby w czasie wielomianowym. Przez dekady było to jedno z otwartych pytań w teorii złożoności obliczeniowej.

Odpowiedź przyszła w 2002 roku, gdy trzej indyjscy informatycy – Manindra Agrawal, Neeraj Kayal i Nitin Saxena – opublikowali algorytm AKS. Udowodnili, że testowanie pierwszości można przeprowadzić deterministycznie w czasie wielomianowym. To odkrycie miało ogromne znaczenie teoretyczne, ponieważ zamknęło wieloletnią debatę o złożoności problemu pierwszości.

Równolegle z rozwojem algorytmów testowania pierwszości postępowały poszukiwania coraz większych liczb pierwszych. Szczególną rolę odgrywa tu projekt GIMPS (Great Internet Mersenne Prime Search), uruchomiony w 1996 roku. Wykorzystuje on rozproszoną moc obliczeniową tysięcy komputerów na całym świecie do poszukiwania liczb pierwszych Mersenne'a, czyli liczb pierwszych postaci 2p − 1.

Odkryte w ramach GIMPS liczby pierwsze mają dziesiątki milionów cyfr. Poszukiwanie kolejnych rekordów nie jest jedynie akademicką ciekawostką – testuje granice algorytmów, sprzętu komputerowego i metod optymalizacji, a przy okazji przyczynia się do rozwoju technik obliczeniowych stosowanych w innych dziedzinach nauki.

Liczby pierwsze w kryptografii

Współcześnie liczby pierwsze są jednym z fundamentów bezpieczeństwa cyfrowego. Ich rola w kryptografii wynika z jednej kluczowej obserwacji: pomnożenie dwóch dużych liczb pierwszych jest operacją trywialną, ale odwrotna operacja – faktoryzacja (rozkład iloczynu na czynniki pierwsze) – jest obliczeniowo bardzo trudna. Na tej asymetrii opiera się algorytm RSA, zaproponowany w 1977 roku przez Ronalda Rivesta, Adi Shamira i Leonarda Adlemana.

Generowanie kluczy w RSA wymaga znajdowania dużych liczb pierwszych. Klucz o długości 2048 bitów powstaje z dwóch liczb pierwszych po około 1024 bity, czyli po ok. 309 cyfr. W praktyce generator liczb losowych tworzy kandydata o odpowiedniej wielkości, a test Millera-Rabina sprawdza, czy jest on liczbą pierwszą. Jeśli nie, losowany jest kolejny kandydat. Z twierdzenia o liczbach pierwszych wynika, że wśród liczb tej wielkości pierwsza jest średnio co ok. 710-ta, a po pominięciu liczb parzystych co ok. 355-ta, więc proces szybko się kończy.

Warto pamiętać, że bezpieczeństwo kryptograficzne zależy nie tylko od wielkości liczb pierwszych, ale też od jakości generatora losowego, który je tworzy. Słaby generator może produkować przewidywalne wartości, co podważa cały system. Dlatego współczesne systemy kryptograficzne korzystają z kryptograficznie bezpiecznych generatorów pseudolosowych (CSPRNG). Jeśli interesuje Cię temat bezpieczeństwa haseł, sprawdź nasz generator haseł.

Przyszłość: komputery kwantowe i nowe wyzwania

Największym zagrożeniem dla kryptografii opartej na liczbach pierwszych są komputery kwantowe. W 1994 roku matematyk Peter Shor opublikował algorytm, który pozwala komputerowi kwantowemu rozkładać duże liczby na czynniki pierwsze w czasie wielomianowym. Gdyby wystarczająco duży komputer kwantowy stał się dostępny, algorytmy takie jak RSA straciłyby swoją skuteczność.

Obecne komputery kwantowe mają zbyt mało stabilnych kubitów, by zagrozić kluczom stosowanym w praktyce. Postęp technologiczny jest jednak trudny do przewidzenia, dlatego społeczność naukowa i instytucje normalizacyjne pracują nad kryptografią postkwantową. Amerykański NIST opublikował w 2024 roku pierwsze standardy takich algorytmów. Opierają się one na problemach, które pozostają trudne zarówno dla komputerów klasycznych, jak i kwantowych, przede wszystkim na kratach algebraicznych i funkcjach skrótu, a w kolejnych propozycjach także na kodach korekcyjnych.

Niezależnie od przyszłości kryptografii, liczby pierwsze nie stracą swojego znaczenia w matematyce. Pozostaną przedmiotem fascynacji badaczy, a metody ich generowania będą nadal się rozwijać. Więcej o roli losowości we współczesnych technologiach przeczytasz w artykule o liczbach losowych w uczeniu maszynowym i sztucznej inteligencji.

Często zadawane pytania

Czym jest liczba pierwsza i dlaczego jest ważna?

Liczba pierwsza to liczba naturalna większa od 1, która dzieli się tylko przez 1 i przez siebie samą. Przykłady to 2, 3, 5, 7, 11, 13. Każda liczba naturalna większa od 1 daje się jednoznacznie rozłożyć na iloczyn liczb pierwszych – to tzw. zasadnicze twierdzenie arytmetyki.

Liczby pierwsze mają kluczowe zastosowania w kryptografii – bezpieczeństwo protokołów takich jak RSA opiera się na trudności rozkładu dużych liczb na czynniki pierwsze. Możesz wygenerować własne liczby pierwsze za pomocą generatora liczb pierwszych.

Jak działa sito Eratostenesa?

Sito Eratostenesa to algorytm eliminujący liczby złożone z listy kolejnych liczb naturalnych. Zaczynamy od 2 i wykreślamy wszystkie jej wielokrotności. Następnie przechodzimy do kolejnej niewykreślonej liczby (3) i powtarzamy proces. Kontynuujemy aż do pierwiastka kwadratowego z górnej granicy zakresu.

Wszystkie niewykreślone liczby są liczbami pierwszymi. Złożoność obliczeniowa wynosi O(n log log n), co czyni algorytm wydajnym dla zakresów do kilkudziesięciu milionów.

Czym różnią się testy probabilistyczne od deterministycznych?

Testy deterministyczne, takie jak AKS, dają stuprocentowo pewną odpowiedź, ale mogą być wolniejsze. Testy probabilistyczne, takie jak Miller-Rabin, działają znacznie szybciej, ale istnieje niewielkie prawdopodobieństwo błędnej klasyfikacji liczby złożonej jako pierwszej.

W praktyce wielokrotne powtórzenie testu probabilistycznego redukuje szansę pomyłki do poziomu pomijalnego (np. przy 20 powtórzeniach szansa błędu jest mniejsza niż 1 na bilion). Dlatego testy probabilistyczne są standardem w kryptografii i generowaniu kluczy.

Dlaczego liczby pierwsze są kluczowe w kryptografii?

Kryptografia asymetryczna, w tym algorytm RSA, opiera się na tym, że mnożenie dwóch dużych liczb pierwszych jest operacją prostą, ale odwrotna operacja – rozkład iloczynu na czynniki pierwsze – jest obliczeniowo bardzo trudna. Ta asymetria pozwala tworzyć klucze publiczne i prywatne.

Bezpieczeństwo połączeń HTTPS, podpisów cyfrowych, bankowości elektronicznej i komunikatorów szyfrowanych end-to-end zależy od trudności faktoryzacji dużych liczb.

Czy komputery kwantowe zagrażają bezpieczeństwu opartemu na liczbach pierwszych?

Teoretycznie tak. Algorytm Shora, opublikowany w 1994 roku, pozwala komputerowi kwantowemu rozkładać duże liczby na czynniki w czasie wielomianowym, co złamałoby RSA. Jednak obecne komputery kwantowe mają zbyt mało stabilnych kubitów, by stanowić realne zagrożenie dla kluczy stosowanych w praktyce.

Naukowcy i instytucje takie jak NIST pracują nad kryptografią postkwantową – nowymi algorytmami odpornymi na ataki kwantowe, opartymi między innymi na kratach algebraicznych i kodach korekcyjnych.

Jaka jest największa znana liczba pierwsza?

Największe znane liczby pierwsze to tzw. liczby pierwsze Mersenne'a, mające postać 2p − 1. Rekordy ustanawia projekt GIMPS (Great Internet Mersenne Prime Search), wykorzystujący rozproszoną moc obliczeniową komputerów na całym świecie.

Odkryte dotąd liczby mają dziesiątki milionów cyfr. Poszukiwanie kolejnych rekordów nie tylko przesuwa granice wiedzy matematycznej, ale też testuje wydajność algorytmów i sprzętu komputerowego.