Test Agrawal-Kayal-Saxena ( AKS test ) je jediným v současnosti známým univerzálním (tj. aplikovatelným na všechna čísla) polynomiálním , deterministickým a nepodmíněným (tj. nezávislým na neprokázaných hypotézách) testem primality čísel, založeným na zobecnění Fermatovy malé věty o polynomech.
Pokud existuje takové, že a pro libovolné od 1 do , pak je buď prvočíslo, nebo mocnina prvočísla.
|
Zde a níže , označuje exponent modulo , je binární logaritmus a je Eulerova funkce [1] .
Porovnání pomocí dvou modulů formuláře
pro polynomy znamená, že existuje takové, že všechny koeficienty polynomu jsou násobky , kde je kruh polynomů z více než celých čísel [1] .
Test AKS navrhl indický vědec Manindra Agrawal a jeho dva studenti Niraj Kayal a Nitin Saxena z Indian Institute of Technology Kanpur a byl poprvé publikován 6. srpna. , 2002 [2] . Před touto publikací byla příslušnost problému rozpoznání primality ke třídě P otevřeným problémem .
Výpočetní složitost původního algoritmu je odhadnuta jako . Za předpokladu , že Artinova domněnka je pravdivá , se doba běhu zlepší na . Za předpokladu správnosti hypotézy Sophie Germainové má čas také tendenci [2] .
V roce 2005 Lenstra a Pomerance publikovali vylepšenou verzi algoritmu s výpočetní složitostí , kde je číslo, které má být zkontrolováno testem [3] [4] .
Podle Agrawalova dohadu existuje varianta algoritmu s runtime , ale Lenstra a Pomerans předložili heuristický argument potvrzující nepravdivost této hypotézy [2] .
Tento algoritmus má velký teoretický význam, ale v praxi se nepoužívá, protože jeho výpočetní náročnost je mnohem vyšší než u nejlepších pravděpodobnostních algoritmů [5] . Za svůj objev obdrželi autoři v roce 2006 Gödelovu cenu a Fulkersonovu cenu [6] .
Hlavní vlastností algoritmu je, že je současně univerzální , polynomiální , deterministický a nepodmíněný [5] , předchozí algoritmy měly maximálně pouze tři z těchto čtyř vlastností.
Univerzálnost testu znamená, že jej lze použít k testování primálnosti libovolného čísla. Mnoho rychlých testů je navrženo k testování čísel z omezené sady. Například Lucas-Lehmerův test funguje pouze pro Mersennova čísla , zatímco Pepinův test funguje pouze pro Fermatova čísla [6] .
Polynom znamená, že maximální doba běhu algoritmu je omezena polynomem v počtu číslic v kontrolovaném čísle. Zároveň testy jako test eliptické křivky (ECPP) a Adlemann-Pomerance-Rumeliho test (APR) mohou prokázat nebo vyvrátit jednoduchost čísla, ale nebylo prokázáno, že doba běhu bude polynomiální pro libovolné vstupní číslo [6] .
Determinismus zaručuje jedinečný předem definovaný výsledek. Pravděpodobnostní testy , jako je Miller-Rabinův test a Bailey-Pomeranz-Selfridge-Wagstaffův test , mohou testovat, zda je číslo prvočíslo v polynomiálním čase, ale dávají pouze pravděpodobnostní odpověď [6] .
Bezpodmínečnost je vlastnost, že správnost algoritmu nezávisí na žádných neprokázaných hypotézách. Tuto vlastnost nemá například Millerův test , který je sice deterministický a pracuje v polynomiálním čase pro libovolné vstupní číslo, ale jeho správnost závisí na neprokázané zobecněné Riemannově hypotéze [6] .
Hlavní myšlenkou algoritmu je zobecnění Fermatovy Malé věty na polynomy, které uvádí, že pro všechny (kde kruh je brán bez inverzí násobením a nulovým prvkem) a , je jednoduchý tehdy a jen tehdy, když [2] [7] [8] :
|
|
jeden |
Jinými slovy, jestliže , , a gcd , potom je prvočíslo právě tehdy, když je splněna podmínka (1) .
Testování tohoto výrazu vyžaduje čas, odhadovaný na , protože v nejhorším případě by měly být vyhodnoceny koeficienty na levé straně. Pro snížení počtu koeficientů a složitosti výpočtů bylo zvoleno použití výrazu [2] jako testu pro jednoduchost :
který získáme vydělením obou částí původního výrazu [7] .
Zde je počet hodnot ke kontrole a hodnota již omezena polynomem z [8] .
V tomto případě místo kvocientového kruhu uvažujeme pole , kde je ireducibilní dělitel nad konečným polem , odlišné od . Počet polynomů tohoto pole, pro které se provádí srovnání, se odhaduje:
Agrawal, Kayal a Saxena dokázali, že algoritmus vrátí "prvočíslo" tehdy a jen tehdy, když je prvočíslo.
Lenstra a Pomerance zveřejnili vylepšenou verzi algoritmu [8] [4] :
Vstup: ,Zde je funkce stejná, jedná se o polynom stupně většího než , takže za určitých dalších podmínek [1] [8] .
Výpočetní složitost tohoto algoritmu je .
Odůvodnění používá skupinu — skupinu všech čísel, která jsou modulo zbytky pro čísla z množiny [9] :
Tato podskupina, nazvěme ji skupina , již obsahuje . Skupina je generována modulo a od té doby .
Druhá skupina použitá v důkazu, , je množina všech polynomických zbytků v (prvoprostoru) modulo a . Tato skupina je generována prvky v poli a je podskupinou multiplikativní skupiny pole [9] .
Hlavní přechodná lemmata a definice použité při zdůvodnění algoritmu [2] :
Při vyhodnocování parametru vyžaduje algoritmus 1 000 000 000 GB ( gigabajtů ) paměti pro čísla 1024 bitů. Pro moderní operační systémy je to příliš mnoho informací. Za předpokladu správnosti Artinovy hypotézy a hypotézy Sophie Germainové o hustotě množiny prvočísel bude pro algoritmus dostatečná hodnota parametru odhadnutá na . V tomto případě bude stačit 1 GB paměti. Ale dokud není správnost těchto hypotéz prokázána, algoritmus není aplikován kvůli složitému provádění. Donald Knuth , který umístil algoritmus do druhého dílu The Art of Programming (Vol. 3), zaznamenal v soukromé korespondenci jeho čistě teoretický charakter [6] .
Čí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 |