Otázka určení, zda je přirozené číslo prvočíslo , je známá jako problém prvočísla.
Test primality (neboli test primality) je algoritmus , který po vložení čísla jako vstupu umožňuje buď nepotvrdit předpoklad o složení čísla, nebo přesně prosadit jeho jednoduchost. Ve druhém případě se to nazývá test opravdové primality. Test primality je tedy pouze hypotézou , že pokud algoritmus nepotvrdí předpoklad, že číslo je složené , pak toto číslo může být s určitou pravděpodobností prvočíslo . Tato definice implikuje menší důvěru ve shodu výsledku testu se skutečným stavem věcí než skutečný test primality, který dává matematicky ověřený výsledek.
Problémy v diskrétní matematice patří mezi ty matematicky nejsložitější . Jedním z nich je problém rozkladu , který spočívá v hledání rozkladu čísla na prvočinitele. Chcete-li to vyřešit, musíte najít prvočísla, což vede k problému jednoduchosti. Problém testu primality patří do třídy složitosti P , to znamená, že doba běhu algoritmů pro jeho řešení závisí polynomiálně na velikosti vstupních dat, což bylo prokázáno v roce 2002 . Existuje podobné, ale neprokázané tvrzení pro problém faktorizace .
Některé aplikace matematiky pomocí faktorizace vyžadují sérii velmi velkých prvočísel vybraných náhodně. Algoritmus pro jejich získání, založený na postulátu Bertranda :
Algoritmus:
|
Doba řešení problému tímto algoritmem není definována, ale je vysoká pravděpodobnost, že je vždy polynomiální, pokud je dostatek prvočísel a jsou víceméně rovnoměrně rozložena . Pro jednoduchá náhodná čísla jsou tyto podmínky splněny.
Je známo ( Euklidova věta ), že množina prvočísel je nekonečná. Dirichletova věta ( 1837 ) říká, že pokud gcd , pak existuje nekonečně mnoho prvočísel shodných s modulo . Jinými slovy, prvočísla jsou distribuována rovnoměrně ve třídách zbytků podle Eulerovy funkce [1] pro jakoukoli hodnotu . Pokud jsou však prvočísla rovnoměrně rozmístěna, ale je jich velmi málo, nemusí být vyhledávání v praxi možné. K vyřešení tohoto druhého problému použijeme Větu o prvočíslech ( 1896 ), podle níž se počet prvočísel v intervalu zvyšuje jako . Toto číslo má tendenci k nekonečnu poměrně rychle, z čehož můžeme usoudit, že i pro velké hodnoty je poměrně vysoká pravděpodobnost ( ) náhodného nalezení prvočísla. Z toho můžeme usoudit, že výše popsaný algoritmus může dát odpověď v polynomiálním čase, pokud existuje polynomiální algoritmus, který nám umožňuje ověřit jednoduchost libovolně velkého čísla , což vede k problému primality.
Úplně první zmínka o prvočíslech je známá z Euklida ( 3. století př . n. l .). Ve stejné době, první algoritmus pro hledání prvočísel byl vynalezen Eratosthenes ( II. století BC ) a je nyní známý jako síto Eratosthenes . Jeho podstata spočívá v sekvenčním vyřazení ze seznamu celých čísel od do násobků dalších prvočísel již nalezených „sítem“ [2] . Mnohem později navrhl arabský matematik Ibn al-Banna vyčíslit celá čísla ne až , ale až , což umožnilo snížit počet operací. Nevýhodou této metody je, že místo kontroly daného čísla pro jednoduchost nabízí sekvenční výčet [3] všech celých čísel až do , a proto je neefektivní a vyžaduje značný výpočetní výkon .
Na počátku 13. století navrhl Leonardo z Pisy , známý jako Fibonacci, posloupnost čísel (pojmenovaná po něm), jejíž jednou z vlastností je, že -té Fibonacciho číslo může být prvočíslo pouze pro prvočísla , kromě . Tuto vlastnost lze použít při testování Fibonacciho čísel na primálnost. On také, nezávisle na ibn al-Banna, navrhl metodu pro kontrolu čísel pro jednoduchost výčtem. Tento algoritmus je pravdivý (nebo nepravděpodobný), protože odpověď je vždy získán, ale extrémně neefektivní.
První, kdo použil vztahy mezi čísly k definování primality, byl Pietro Antonio Cataldi ve své práci o dokonalých číslech. Dokonalá čísla jsou ta, která se rovnají součtu svých vlastních dělitelů. Prvních sedm dokonalých čísel je 6, 28, 496, 8128, 33550336, 8589869056 a 137438691328. Cataldi zjistil, že pokud je číslo prvočíslo a číslo je také prvočíslo, pak je číslo dokonalé.
V 17. století se francouzský matematik Marin Mersenne zabýval studiem čísel ve tvaru [4] , později na jeho počest pojmenovaných Mersennova čísla . Mersenne zjistil, že z prvních 257 Mersennových čísel je prvočíslo pouze 11 (pro n = 2, 3, 5, 7, 13, 17, 19, 31, 67, 127 a 257). Při tom udělal několik chyb ( není prvočíslo na p = 67 nebo 257 a je na p = 61, 89 a 107). Hledání prvočísel mezi mersennovskými čísly je docela jednoduché díky Luc-Lehmer testu , který umožňuje najít řešení poměrně rychle. Proto jsou Mersennova čísla největší mezi v současnosti známými prvočísly. V korespondenci mezi Mersennem a Fermatem bylo vyjádřeno několik dalších myšlenek týkajících se prvočísel [4] .
Fermat tedy objevil, že pokud celé číslo není dělitelné prvočíslem , pak je číslo vždy dělitelné ( Fermatova malá věta ). Věta byla později zobecněna Eulerem . Několik testů primality je založeno na Fermatově Malé větě. Fermat také navrhl, že čísla formy pro všechna přirozená čísla jsou prvočísla . To je skutečně případ pro . Protipříklad k tomuto tvrzení našel Euler – . Pro testování Fermatových čísel na primálnost existuje účinný Pepinův test . Do dnešního dne nebyla nalezena žádná nová Fermatova prvočísla.
Mezi jinými vědci se jednoduchostí čísel zabývali Euler, Legendre , Gauss . Významných výsledků při řešení problému prvočíselnosti dosáhl francouzský matematik Édouard Lucas ve své práci o Fermatových a Mersennových číslech. Je to kritérium pro jednoduchost Mersennových čísel, které uvedl, které je nyní známé jako Lucas-Lehmerův test.
V roce 2002 byl vyvinut test deterministické polynomiální primality, test Agrawal-Kayal-Saxena . Jeho výskyt byl předpovězen existencí certifikátů polynomiální primality a v důsledku toho tím, že problém kontroly primality čísla patřil současně do tříd NP a co-NP .
Stávající algoritmy pro testování čísla na primálnost lze rozdělit do dvou kategorií: testy skutečné primality a testy pravděpodobnosti primality. Pravdivé testy jako výsledek výpočtů vždy vypovídají o jednoduchosti nebo složení čísla, pravděpodobnostní test dává s určitou pravděpodobností odpověď na složení čísla nebo jeho nesložení [2] [4] . Zjednodušeně řečeno, pravděpodobnostní algoritmus říká, že číslo s největší pravděpodobností není složené, ale nakonec se může ukázat jako prvočíslo nebo složené. Čísla, která vyhovují testu pravděpodobnosti prvočíselnosti, ale jsou složená, se nazývají pseudoprima [1] . Jedním příkladem takových čísel jsou Carmichaelova čísla [3] . Můžete také pojmenovat Euler-Jacobiho čísla pro Solovay-Strassenův test a Lucasova pseudoprimes.
Jedním příkladem opravdových testů primálnosti je Luc-Lehmerův test pro Mersennova čísla . Zjevnou nevýhodou tohoto testu je, že se vztahuje pouze na řadu určitých druhů čísel. Mezi další příklady patří ty, které jsou založeny na Fermatově Malé větě :
Stejně jako:
Tato kategorie zahrnuje:
V současné době jsou prvočísla široce používána v oblasti informační bezpečnosti. Především je to způsobeno vynálezem metody šifrování veřejným klíčem, která se používá při šifrování informací a v algoritmech elektronického digitálního podpisu . V současné době je podle standardů velikost prvočísel používaných při vytváření digitálního podpisu pomocí eliptických křivek v souladu s GOST R 34.10-2012 nejméně 254 bitů. Pro tak velká čísla je otázka určení prvočísla čísla extrémně obtížná. Jednoduché metody, jako je výčetní metoda, jsou nevhodné pro použití z důvodu, že vyžadují extrémně velké množství výpočetních zdrojů a velké množství času [6] .
Určení prvořadosti čísla je také nezbytné při prolomení informací zašifrovaných nebo podepsaných pomocí algoritmu RSA . K otevření takové zprávy je nutné umět rozložit číslo na dva prvočísla, což je pro velká čísla netriviální úkol.
Na druhou stranu, při generování klíčů pro kryptosystémy s veřejným klíčem , schémata elektronického podpisu atd. se používají velká pseudonáhodná prvočísla. Například při použití protokolu Diffie-Hellman je nutné mít prvočíslo, které určuje konečné pole . Proto použití účinného testu primality umožňuje zvýšit spolehlivost algoritmů pro generování takových klíčů.
Číselné teoretické algoritmy | |
---|---|
Testy jednoduchosti | |
Hledání prvočísel | |
Faktorizace | |
Diskrétní logaritmus | |
Hledání GCD | |
Modulová aritmetika | |
Násobení a dělení čísel | |
Výpočet druhé odmocniny |
Algoritmy teorie čísel | |
---|---|
Testy jednoduchosti | |
Generování prvočísel |
|
Faktorizace celých čísel |
|
Násobení |
|
Diskrétní logaritmus | |
Největší společný dělitel | |
Modulární odmocnina | |
Jiné algoritmy | |
Kurzíva znamená, že algoritmus je navržen pro čísla zvláštního druhu |