Adlemann-Pomeranz-Rumeli test (nebo Adleman-Pomeranz-Rumeli test, APR test ) je dosud nejúčinnějším, deterministickým a nepodmíněným testem primality , vyvinutý v roce 1983. Pojmenováno na počest svých výzkumníků - Leonarda Adlemana , Karla Pomeranse a Roberta Roumeliho . Algoritmus obsahuje aritmetiku v cyklomatických polích .
Následně algoritmus vylepšili Henry Cohen a Hendrik Lenstra na APR-CL , jehož dobu běhu pro libovolné číslo lze vypočítat jako , kde je nějaká vypočítaná konstanta.
Až do roku 1980 byla u všech známých algoritmů testování primality, kromě pravděpodobnostních a neprokázaných, časová složitost algoritmu exponenciální. Nicméně, v roce 1983 byl vyvinut algoritmus, který leží blízko P - třídě . Přísně vzato, algoritmus do této třídy nepatří, nicméně pomalu rostoucí složitost umožňuje praktické použití algoritmu.
Například pro číslo - googolplex ,
Starý vtip říká:
"Ukázalo se jít do nekonečna, ale nikdo ho nikdy neviděl dělat."Ian Stewart
Nechť existuje nějaká konečná množina prvočísel . Pokud jsou pro některé prvočíslo splněny následující podmínky :
se pak nazývá euklidovské prvočíslo s ohledem na množinu .
Pro dané číslo sestrojíme množinu tak, že součin všech euklidovských prvočísel vzhledem k této množině bude větší než . Vyberme co nejmenší .
Prvky této množiny se budou nazývat množina „počátečních“ prvočísel.
Pojďme si představit nějaké číslo . Nechť je jeho primitivní kořen . Pak musí být splněna následující podmínka:
,
kde .
Poznámka : Protoževolíme nejmenší nezáporné číslo.
Jacobiho součet je součet v následujícím tvaru:
,
kde součet je nad všemi sadami coset pro in , kromě těch, které se rovnají .
Hlavní lemmata [2] použitá při dokazování správnosti algoritmu:
Primární ideály , ležící nad hlavním ideálem , jsou:
pro všechny
Nechte a mějte pořádek ve skupině . Vezměme si . Také kde je polynom pro každý . Předpokládáme, že ideály If je prvočíslo , pak v :
a každý dělitelný nějakým prvotním ideálem lží nad
Vezměme také prvky , které spolu a s ohledem na sebe navzájem souvisí .
je Hilbertův symbol .
Vybíráme takové, že . Předpokládejme : to je nebo .
Pak
Pro všechny
Pokud , pak existují takové , že a
kde je inverzní prvek k
Dovolit být ideály v takové, že a nechť je konjugovat primární ideály dělení resp. Ať takové existuje . Pak pro všechny platí:
a proto
Pokud je složené číslo, pak má nějakého dělitele . Pro kontrolu jednoduchosti hledáme toto .
Pokud známe hodnoty pro každý pár , pak pomocí čínské věty o zbytku můžeme najít . Každý pár je vybrán následovně: , a je prvočíslo euklidovské číslo relativně takové, že
Algoritmus vyjmenuje všechny možné hodnoty pro všechny na základě skutečnosti, že je známa pouze jedna
1. Vypočítejte nejmenší kladné číslo bez čtverců takové, že: .
Pojďme definovat množinu "počátečních" prvočísel, která jsou děliteli . Říkáme tomu euklidovské prvočíslo, jestliže prvočíslo a
2. Zkontrolujeme, zda je dělitelné nějakým "počátečním" nebo euklidovským prvočíslem. Pokud existuje dělitel a není roven , pak deklarujeme složený a přerušíme algoritmus. Jinak vypočítáme nejmenší kladný primitivní kořen pro každé euklidovské prvočíslo .
3. Pro každé „počáteční“ prvočíslo najdeme čísla taková, že:
,
,
Pro přijetí .
4. Pro každé "počáteční" a euklidovská prvočísla, abychom stanovili prvočíslo :
,
kam patří a je kořenem jednoty .
Vypočítejte Jacobiho součet
pokud ,
-li
B. Krok výpočtu1. Pro každé „počáteční“ prvočíslo najděte gcd v pro a množiny , kde přechází přes všechny hodnoty euklidovských prvočísel a , a přechází přes všechny hodnoty z Gal . Pak buď učiníme rozhodnutí o tom, co je kompozit, nebo postavíme správný ideál v kruhu a také najdeme čísla a taková , že:
,
nebo někde
2. Pro každé „počáteční“ prvočíslo uděláme následující: pokud pro některé , pak vezměte . V tomto klíči sestrojíme čísla pro všechny , a to tak, že:
Pokud pro všechny , přijímáme .
C. Konsolidační krokUdělejme kroky 1-4 pro všechny přírodní
1. Pro každou počítáme podle čínské věty o zbytku počítáme čísla :
na všelijaké věci . Předpokládejme to také
2. Pro každý vypočítáme nejmenší celé číslo, kladné číslo
3. Pomocí čínské věty o zbytku vypočítejte nejmenší kladné číslo takové, že pro každé
4. Jestliže , pak deklarujeme kompozitní. V opačném případě přejdeme na další
5. Prohlašujeme jednoduché.
Odhad doby provádění algoritmu vyplývá z následujících vět [2] :
Věta 1.U hodnot výše uvedený algoritmus správně určuje, zda je prvočíslo nebo složené v čase . A platí následující odhady: pro jednoduché
pro všechny hodnoty Kde je kladná, vypočtená konstanta. Věta 2.Existují kladné, vypočítatelné konstanty takové, že pro všechny