Test Adleman-Pomerans-Rumeli

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é 20. února 2020; kontroly vyžadují 3 úpravy .

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.

Historie

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

Klíčové pojmy

Euklidovské prvočíslo

Nechť existuje nějaká konečná množina prvočísel . Pokud jsou pro některé prvočíslo splněny následující podmínky :

  1.  je číslo bez čtverců
  2. všichni prvočíslí dělitelé patří do množiny

se pak nazývá euklidovské prvočíslo s ohledem na množinu .

Sada "počátečních" prvočísel

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.

Indq ( x)

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

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

Klíčová lemmata

Hlavní lemmata [2] použitá při dokazování správnosti algoritmu:


Lemma 1.

Primární ideály , ležící nad hlavním ideálem , jsou:

pro všechny


Lemma 2.

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


Lemma 3.

Vezměme také prvky , které spolu a s ohledem na sebe navzájem souvisí .

 je Hilbertův symbol .


Lemma 4. Pokud , pak


Lemma 5.

Vybíráme takové, že . Předpokládejme : to je nebo .

Pak


Lemma 6. [3] .

Pro všechny


Lemma 7.

Pokud , pak existují takové , že a

kde  je inverzní prvek k


Lemma (Extrakce).

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

Myšlenka algoritmu

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

Algoritmus

Vstup: celé číslo n > 1. A. Krok přípravy

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čtu

1. 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í krok

Udě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é.

Hodnocení obtížnosti

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

Implementace softwaru

Poznámky

  1. Stewart, 2015 .
  2. 1 2 Adleman, Pomerance, Rumely, 1983 .
  3. K. Iwasawa. Poznámka k jacobi sum  //  Symposia Math. - 1975. - S. 447-459 .

Reference

  • Ian Stewart. Největší matematické problémy. — M. : Alpina literatura faktu, 2015. — 460 s. - ISBN 978-5-91671-318-3 .
  • Leonard M. Adleman, Carl Pomerance a Robert S. Rumely. [1]  (anglicky)  = O rozlišování prvočísel od složených čísel. - 1983. - S. 7-25 .