Test jednoduchosti

Aktuální verze stránky ještě nebyla zkontrolována zkušenými přispěvateli a může se výrazně lišit od verze recenzované 21. května 2020; ověření vyžaduje 1 úpravu .

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.

Úvod

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:

  1. Vstup : přirozené číslo
  2. Řešení (hledejte náhodné prvočíslo P)
    1. Funkce generování libovolného přirozeného čísla na segmentu
    2. Pokud kompozitní, pak
      1. Pokud pak
    3. Návrat "  - náhodné prvočíslo"

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.

Historické informace

Ú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 .

Opravdové testy primality

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:

Pravděpodobnostní testy primality

Tato kategorie zahrnuje:

Testy jednoduchosti v kryptografii

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íčů.

Viz také

Poznámky

  1. 1 2 Kormen T., Leiser Ch . Algoritmy. Konstrukce a analýza. - M. : MTSNMO, 2002. - S. 765-772.
  2. 1 2 Vasilenko O. N. Číselné teoretické algoritmy v kryptografii. - M. : MTSNMO, 2003. - 328 s.
  3. 1 2 Crandall R., Pomerance C. Prvočísla: Výpočetní perspektiva. - Springer, 2005.
  4. 1 2 3 Donald Knuth . Umění programování, svazek 2. Odvozené algoritmy. - M .: "Williams" , 2007.
  5. Nesterenko Yu.V. Úvod do kryptografie. - Petr, 2001. - 288 s.
  6. B. Schneier. Aplikovaná kryptografie. - S. 296-300.

Literatura