Az Adlemann-Pomeranz-Rumeli teszt (vagy Adleman-Pomeranz - Rumeli teszt, APR teszt ) az eddigi leghatékonyabb , determinisztikus és feltétel nélküli primalitásteszt , amelyet 1983-ban fejlesztettek ki. Kutatói tiszteletére nevezték el - Leonard Adleman , Karl Pomerans és Robert Roumeli . Az algoritmus ciklomatikus mezőkben tartalmaz aritmetikát .
Ezt követően Henry Cohen és Hendrik Lenstra javította az algoritmust APR-CL- re , amelynek futásideje tetszőleges számra úgy számítható ki , hogy , ahol valamilyen számított állandó.
1980-ig az összes ismert primalitástesztelő algoritmus esetében, kivéve a valószínűségi és a nem bizonyított algoritmusokat, az algoritmus időbeli összetettsége exponenciális volt. 1983-ban azonban kifejlesztettek egy algoritmust, amely közel van a P - osztályhoz . Szigorúan véve az algoritmus nem tartozik ebbe az osztályba, azonban a lassan növekvő komplexitás lehetővé teszi az algoritmus gyakorlati alkalmazását.
Például egy szám esetén - googolplex ,
A régi vicc így szól:
"Bizonyított , hogy a végtelenségig elmegy, de még soha senki nem látta, hogy megcsinálja."Ian Stewart
Legyen valamilyen véges prímkészlet . Ha valamelyik prímszámra teljesülnek a következő feltételek :
ekkor euklideszi prímnek nevezzük a halmazhoz képest .
Adott számhoz olyan halmazt készítünk , hogy az összes euklideszi prím szorzata ehhez a halmazhoz képest nagyobb legyen, mint . Válasszuk a lehető legkisebbet .
Ennek a halmaznak az elemeit "kezdeti" prímszámok halmazának nevezzük.
Mutassunk be néhány számot . Legyen a primitív gyöke . Ekkor a következő feltételnek kell teljesülnie:
,
ahol .
Megjegyzés : Mivela legkisebb, nem negatív számot választjuk.
A Jacobi-összeg a következő formájú összeg:
,
ahol az összegzés az összes kosethalmazra vonatkozik -ben , kivéve azokat, amelyek egyenlőek .
Az algoritmus helyességének bizonyítására használt fő lemmák [2] :
A főideálok legfőbb ideáljai , amelyek a főideál felett állnak, a következők:
mindenkinek
Legyen rend a csoportban . Vegyük . Valamint hol van egy polinom az egyes . Feltételezzük, hogy az If ideál egy prímosztó , akkor a következőben:
és mindegyik osztható a hazugság valamilyen elsődleges ideáljával
Vegyünk egymáshoz és egymáshoz viszonyított elemeket is .
Mi olyat választunk . Tegyük fel: vagyis vagy .
Akkor
Mindenkinek
Ha , akkor létezik olyan, hogy és
hol van az inverz elem
Legyenek ideálok úgy, hogy és legyenek konjugált elsődleges ideálok , amelyek rendre osztva. Legyenek ilyenek . Akkor mindenre igaz:
és ezért
Ha összetett szám, akkor van valami osztója . Az egyszerűség kedvéért ezt keressük .
Ha ismerjük az egyes párok értékeit , akkor a kínai maradéktétel segítségével megtalálhatjuk a . Mindegyik pár a következőképpen van kiválasztva: , és egy prím euklideszi szám, amely relatíve olyan, hogy
Az algoritmus az összes lehetséges értéket felsorolja azon tény alapján, hogy csak egy ismert
1. Számítsa ki a legkisebb pozitív négyzetmentes számot úgy, hogy: .
Határozzuk meg a "kezdeti" prímszámok halmazát, amelyek osztói . Euklideszi prímnek nevezzük , ha a prím és
2. Ellenőrizzük, hogy osztható -e bármely "kezdő" vagy euklideszi prímszámmal. Ha van osztó, és nem egyenlő -val, akkor összetettnek nyilvánítjuk és megszakítjuk az algoritmust. Egyébként minden euklideszi prímhez kiszámítjuk a legkisebb pozitív primitív gyöket .
3. Minden "kezdeti" prímszámhoz olyan számokat találunk , amelyek:
,
,
Az elfogadásért .
4. Minden "kezdő" és euklideszi prímszámra úgy, hogy rögzítsünk egy prímideált :
,
ahol az egységhez tartozik és ez az egység gyökere .
Számítsd ki a Jacobi-összeget!
ha ,
ha
B. Számítási lépés1. Minden „kezdeti” prímszámhoz keresse meg a és a halmaz gcd - jét , ahol átfut az euklideszi prímek összes értékén, és , és a Gal összes értéken . Ezután vagy döntünk arról, hogy mi az összetett, vagy megépítjük a megfelelő ideált a ringben , és találunk olyan számokat és , hogy:
,
vagy valahol hol
2. Minden "kezdeti" prímszámnál a következőket tesszük: ha néhány esetén , akkor vegyük . Ebben a kulcsban számokat állítunk össze az összes számára , és úgy, hogy:
Ha mindenért , akkor elfogadjuk .
C. Konszolidációs lépésVégezzük el az 1-4. lépést minden természetesnél
1. Mindegyikre a kínai maradéktétel alapján számítjuk ki a számokat :
mindenféle dologra . Tegyük fel azt is
2. Mindegyikhez kiszámoljuk a legkisebb egész számot, egy pozitív számot
3. A kínai maradéktétel segítségével számítsa ki a legkisebb pozitív számot úgy, hogy mindegyikhez!
4. Ha , akkor összetettnek nyilvánítjuk. Ellenkező esetben továbblépünk a következőre
5. Egyszerűnek nyilvánítjuk .
Az algoritmus végrehajtási idejének becslése a következő tételekből következik [2] :
1. tétel.Az értékek esetében a fenti algoritmus helyesen határozza meg, hogy időben prím vagy összetett . És a következő becslések érvényesek: egyszerűre
minden értéknél ahol van egy pozitív, számított állandó. 2. tétel.Vannak pozitív, kiszámítható állandók , amelyek mindenre vonatkoznak