Prvočísla jsou čísla, která se dělí pouze na sebe a na jednotku, aniž by měla jiné dělitele. Hrají důležitou roli v matematice a kryptografii. Hledání prvočísel je jedním z hlavních úkolů v matematice a počítačových vědách. V tomto článku se podíváme na základní metody a algoritmy vyhledávání prvočísel.
Jedním z nejjednodušších způsobů, jak hledat prvočísla, je přeskočit všechna čísla od 2 do ověřitelného čísla a zkontrolovat jejich dělitelnost. Tato metoda se nazývá přehnaná metoda. Je snadno implementovatelný, ale neefektivní pro velká čísla, protože vyžaduje ověření každého čísla.
Účinnější metodou hledání prvočísel je eratosfénová mřížka. Je založen na principu odstranění všech jejich násobků ze seznamu čísel. Nejprve se vytvoří seznam všech čísel od 2 do daného limitu. Poté jsou postupně odstraněna všechna násobky, počínaje 2. Po dokončení procesu zůstávají v seznamu pouze prvočísla.
Dalším účinným algoritmem pro hledání prvočísel je Millerův-Rabinův test. Je založen na pravděpodobnostní kontrole čísla na jednoduchosti. Algoritmus opakovaně testuje číslo na jednoduchost pomocí náhodných čísel a provádí iterace, aby se zvýšila přesnost kontroly. Tento přístup umožňuje efektivně definovat jednoduchost velkých čísel.
Metoda přebírání dělitelů
Algoritmus metody pro přepínání děličů lze znázornit následovně:
| 1 | Určíme číslo, do kterého budeme hledat prvočísla. |
| 2 | Přejímáme všechna čísla od 2 do daného čísla. |
| 3 | Zkontrolujeme, zda je dané číslo dělitelné aktuálním číslem beze zbytku. |
| 4 | Pokud je dělitelné, číslo není jednoduché. |
| 5 | Pokud všechna čísla od 2 do daného čísla nerozdělí beze zbytku, pak je číslo prvočíslo. |
Výhodou metody přebíjení dělitelů je její jednoduchost a srozumitelnost. Je však neefektivní, zejména při práci s velkými čísly, protože vyžaduje přepočet všech čísel od 2 do zadaného čísla.
V praxi se tato metoda používá zřídka kvůli své nízké rychlosti provozu. Místo toho je vhodnější použít složitější, ale efektivnější algoritmy, jako je eratosfenův algoritmus nebo Millerův-Rabinův test.
Hledání prvočísel kontrolou všech možných dělitelů
Pro každé číslo $X$ z intervalu $[2, \sqrt]$ , zkontrolujte, zda je $n$ rozdělen na $x$ beze zbytku. Pokud je dělitelné, pak je číslo $n$ složené a my ukončíme kontrolu. V opačném případě je číslo $n$ jednoduché.
Tato metoda se snadno implementuje, ale její hlavní nevýhodou je vysoká výpočetní složitost pro velká čísla. Při hledání velmi velkých prvočísel by měly být použity efektivnější algoritmy, jako jsou algoritmy pro testování čísel na jednoduchost založené na eratosférické mřížce nebo testy na jednoduchost, jako je Millerův-Rabinův test nebo fermatův test.
Při nízkých hodnotách $ n$ však může být metoda kontroly všech možných dělitelů dostatečně účinná a snadno použitelná.
Metoda eratosfénové mřížky
Pro použití metody eratosfenového roštu je nutné:
- Vytvořte seznam všech čísel v daném rozsahu. Počáteční seznam obsahuje všechna čísla od 2 do N, kde N je horní hranice.
- Počínaje prvním číslem v seznamu (2), vyškrtněte všechna jeho násobky ze seznamu.
- Přejít na další liché číslo, které není vyškrtnuto, a proces opakovat.
- Opakujte kroky 2 a 3, dokud se nezobrazí všechna čísla v seznamu.
V důsledku provádění algoritmu zůstanou v seznamu pouze prvočísla.
Metoda eratosfénové mřížky je jedním z nejrychlejších a nejúčinnějších způsobů, jak najít prvočísla. Umožňuje vám rychle vyřadit mnoho obtížných čísel a najít pouze prvočísla, což je zvláště užitečné při práci s velkými čísly a velkými rozsahy.
Hledání prvočísel pomocí eratosférické mřížky
Myšlenkou eratosthenovy mřížky je důsledně vyloučit všechna čísla násobky aktuálního prostého čísla. Nejprve se vytvoří seznam čísel od 2 do N, kde N je číslo, do kterého chceme najít prvočísla.
Poté vybereme první neoznačené číslo ze seznamu (2) a přeškrtneme všechna jeho násobky (4, 6, 8 atd.). Poté vybereme další neoznačené číslo (3) a opakujeme proces přeškrtnutí všech jeho násobků.
Pokračujeme v tomto procesu, dokud nedosáhneme konce seznamu. V důsledku toho zůstanou pouze neoznačená čísla, což jsou prvočísla.
Eratosfénová mřížka vám umožňuje rychle najít všechna prvočísla až k danému číslu N.tento algoritmus má složitost o(N*log(log(N)))), což je zvláště užitečné při práci s velkými čísly.
Metoda zkušebního dělení
Použití metody zkušebního Dělení znamená sériovou kontrolu čísla n rozdělení na všechna čísla od 2 do √n. Pokud žádné z těchto čísel není dělitelem čísla n číslo je považováno za jednoduché.
Při implementaci metody zkušebního dělení lze použít optimalizace, jako je kontrola pouze lichých čísel nebo použití již nalezených prvočísel jako dělitelů. Samotná podstata metody však zůstává stejná.
Je třeba zjistit, zda je číslo 17 jednoduché. V tomto případě zkontrolujeme, zda je číslo 17 dělitelné čísly od 2 do √17 ≈ 4,12. Po provedených kontrolách jsme přesvědčeni, že číslo 17 není dělitelné žádným z těchto čísel, takže je jednoduché.
Použití zkušebního dělení k určení jednoduchosti čísla
Chcete-li určit jednoduchost čísla N pomocí zkušebního dělení, musíte důsledně zkontrolovat dělitelnost čísla N na všechna čísla v rozmezí od 2 do kořene N.pokud je číslo N vyděleno libovolným z těchto čísel beze zbytku, není prvočíslo. Pokud číslo N není dělitelné žádným z těchto čísel, je s vysokou pravděpodobností prvočíslo.
Výhodou zkušebního dělení je jeho jednoduchost a relativní rychlost provozu. Vzhledem k tomu, že testujeme dělitelnost čísla pouze na čísla v relativně malém rozsahu, je tato metoda vhodná pro rychlou kontrolu jednoduchosti čísel ve velkém rozsahu.
Nevýhodou použití zkušebního dělení je však jeho vysoká pracnost pro velká čísla. Při kontrole jednoduchosti velkého čísla N musíme provést dělení na všechna čísla v rozmezí od 2 do kořene N, což může trvat značnou dobu.
Metoda Millerova-Rabinova testu
Základní myšlenka metody je následující:
- Vybíráme náhodné číslo a z intervalu [2, n - 2], kde n - číslo, které je testováno na jednoduchost.
- Vypočítají se zbytky z dělení čísla a na stupně dvojky.
- Pokud je jeden ze zbytků 1 nebo -1 (mod n), pak číslo n může to být jednoduché. V tomto případě kontrola pokračuje s následujícím náhodným číslem a.
- Pokud všechny zbytky nejsou 1 nebo -1 (mod n), pak číslo n složený.
- Opakujeme kroky 1-4 několikrát, abychom zvýšili přesnost výsledku.
Metoda Millerova-Rabinova testu má vysokou pravděpodobnost stanovení jednoduchosti čísla. Může být použit ke kontrole čísel s velmi velkým počtem číslic a je jednou z hlavních metod přibližného vyhledávání prvočísel.
Millerův-Rabinův algoritmus pro testování jednoduchosti čísla
Millerův-Rabinův algoritmus funguje následovně:
- Je vybrána základna a, která by měla být menší než ověřitelné číslo n.
- Číslo n-1 se rozkládá na stupně dvojky a liché číslo, tj. n-1 = 2^r * s, kde S je liché.
- Jsou vypočítány sériové hodnoty a^s mod n, (a^2s mod n), . (a^(2^r * s) mod n).
- Pokud alespoň pro jednu hodnotu a^((2^i)*s) mod n není výsledek 1 a není roven n-1 pro všechna i od 0 do r-1, pak je číslo n považováno za složené, iterace algoritmu je dokončena.
- Pokud jsou všechny hodnoty 1 nebo rovny n-1, pak je číslo n pravděpodobně prvočíslo, algoritmus pokračuje v iteraci s novou základnou a, nebo je dokončen, pokud je dosaženo limitu opakování.
V důsledku algoritmu lze získat dva výsledky: číslo n je s největší pravděpodobností prvočíslo nebo číslo n, s největší pravděpodobností složené. Čím více iterací a získaných jednoduchých výsledků, tím vyšší je pravděpodobnost, že číslo je skutečně jednoduché.
Millerův-Rabinův algoritmus se používá v různých softwarových systémech a aplikacích k testování jednoduchosti velkých čísel, jako je kryptografie nebo generování prvočísel pro šifrování.