AKS-primaliteitstest - AKS primality test
De AKS-primaliteitstest (ook bekend als Agrawal-Kayal-Saxena-primaliteitstest en cyclotomische AKS-test ) is een deterministisch priembewezen algoritme gemaakt en gepubliceerd door Manindra Agrawal , Neeraj Kayal en Nitin Saxena , computerwetenschappers van het Indian Institute of Technology Kanpur , op 6 augustus 2002, in een artikel getiteld "PRIMES is in P". Het algoritme was het eerste dat aantoonbaar kan bepalen of een bepaald getal priemgetal of samengesteld is in polynomiale tijd , zonder te vertrouwen op wiskundige vermoedens zoals de algemene Riemann-hypothese . Het bewijs is ook opmerkelijk omdat het niet vertrouwt op het gebied van analyse . In 2006 ontvingen de auteurs zowel de Gödelprijs als de Fulkersonprijs voor hun werk.
Belang
AKS is het eerste priembewezen algoritme dat tegelijkertijd algemeen , polynoom , deterministisch en onvoorwaardelijk is . Eerdere algoritmen waren eeuwenlang ontwikkeld en bereikten hoogstens drie van deze eigenschappen, maar niet alle vier.
- Het AKS-algoritme kan worden gebruikt om de primaliteit van een gegeven algemeen nummer te verifiëren . Er zijn veel snelle priemtesten bekend die alleen werken voor getallen met bepaalde eigenschappen. De Lucas-Lehmer-test werkt bijvoorbeeld alleen voor Mersenne-getallen , terwijl de test van Pépin alleen op Fermat-getallen kan worden toegepast .
- De maximale looptijd van het algoritme kan worden uitgedrukt als een polynoom over het aantal cijfers in het doelnummer. ECPP en APR bewijzen of weerleggen overtuigend dat een bepaald getal priemgetal is, maar het is niet bekend dat ze polynomiale tijdsgrenzen hebben voor alle invoer.
- Het algoritme maakt gegarandeerd deterministisch onderscheid of het doelgetal priem of samengesteld is. Gerandomiseerde tests, zoals Miller-Rabin en Baillie-PSW , kunnen elk willekeurig getal testen op priemgetallen in polynomiale tijd, maar het is bekend dat ze slechts een probabilistisch resultaat opleveren.
- De juistheid van AKS is niet afhankelijk van enige onbewezen subsidiaire hypothese . Daarentegen Miller's versie van de Miller-Rabin-test is volledig deterministisch en loopt in polynomiale tijd over alle inputs, maar de juistheid ervan hangt af van de waarheid van de nog onbewezen gegeneraliseerde Riemann-hypothese .
Hoewel het algoritme van enorm theoretisch belang is, wordt het in de praktijk niet gebruikt, waardoor het een galactisch algoritme wordt . Voor 64-bits ingangen is de Baillie-PSW-primaliteitstest deterministisch en verloopt vele ordes van grootte sneller. Voor grotere inputs zijn de prestaties van de (ook onvoorwaardelijk correcte) ECPP- en APR- tests veel beter dan die van AKS. Bovendien kan ECPP een priemcertificaat afgeven dat onafhankelijke en snelle verificatie van de resultaten mogelijk maakt, wat niet mogelijk is met het AKS-algoritme.
concepten
De AKS-primaliteitstest is gebaseerd op de volgende stelling: Gegeven een geheel getal en een geheel getal coprime to , is priem dan en slechts dan als de polynomiale congruentierelatie
-
( 1 )
houdt binnen de polynoomring . Merk op dat het onbepaalde aangeeft dat deze polynoomring genereert.
Deze stelling is een generalisatie naar veeltermen van de kleine stelling van Fermat . In één richting kan het gemakkelijk worden bewezen met behulp van de binomiale stelling samen met de volgende eigenschap van de binomiale coëfficiënt :
- voor alles als priem is.
Hoewel de relatie ( 1 ) op zichzelf een priemtest vormt, kost het verifiëren ervan exponentiële tijd : de brute force- benadering zou de uitbreiding van de polynoom en een verlaging van de resulterende coëfficiënten vereisen .
De congruentie is een gelijkheid in de polynoomring . Evalueren in een quotiëntring van creëert een bovengrens voor de graad van de betrokken veeltermen. De AKS evalueert de gelijkheid in , waardoor de rekencomplexiteit afhankelijk is van de grootte van . Voor de duidelijkheid wordt dit uitgedrukt als de congruentie
-
( 2 )
wat hetzelfde is als:
-
( 3 )
voor sommige veeltermen en .
Merk op dat alle priemgetallen aan deze relatie voldoen (kiezen in ( 3 ) geeft ( 1 ), wat geldt voor priemgetal). Deze congruentie kan worden gecontroleerd in polynomiale tijd wanneer het polynoom is met de cijfers van . Het AKS-algoritme evalueert deze congruentie voor een grote reeks waarden, waarvan de grootte polynoom is voor de cijfers van . Het bewijs van geldigheid van het AKS-algoritme laat zien dat men een en een reeks waarden met de bovenstaande eigenschappen kan vinden, zodat als de congruenties gelden, het een macht van een priemgetal is.
Geschiedenis en looptijd
In de eerste versie van het hierboven geciteerde artikel bewezen de auteurs dat de asymptotische tijdcomplexiteit van het algoritme (met behulp van Õ van de grote O-notatie ) is - de twaalfde macht van het aantal cijfers in n keer een factor die polylogaritmisch is in de aantal getallen. Deze bovengrens was echter nogal los; een wijdverbreide gissing over de verdeling van de Sophie Germain-priemgetallen zou, indien waar, het ergste geval onmiddellijk terugbrengen tot .
In de maanden na de ontdekking verschenen er nieuwe varianten (Lenstra 2002, Pomerance 2002, Berrizbeitia 2002, Cheng 2003, Bernstein 2003a/b, Lenstra en Pomerance 2003), die de rekensnelheid aanzienlijk verbeterden. Vanwege het bestaan van de vele varianten verwijzen Crandall en Papadopoulos naar de "AKS-klasse" van algoritmen in hun wetenschappelijke artikel "On the implementatie van AKS-class primality tests", gepubliceerd in maart 2003.
Als reactie op sommige van deze varianten, en op andere feedback, werd het artikel "PRIMES is in P" bijgewerkt met een nieuwe formulering van het AKS-algoritme en van het bewijs van correctheid. (Deze versie werd uiteindelijk gepubliceerd in Annals of Mathematics .) Hoewel het basisidee hetzelfde bleef, werd r op een nieuwe manier gekozen en was het bewijs van correctheid coherenter georganiseerd. Het nieuwe bewijs was bijna uitsluitend gebaseerd op het gedrag van cyclotomische veeltermen over eindige velden . De nieuwe bovengrens van tijdcomplexiteit werd later verlaagd met behulp van aanvullende resultaten uit de zeeftheorie naar .
In 2005 demonstreerden Pomerance en Lenstra een variant van AKS die in bedrijf is, wat leidde tot een nieuwe bijgewerkte versie van het papier. Agrawal, Kayal en Saxena voorgesteld een variant die zou draaien in als Agrawal Het vermoeden van waar zou zijn; een heuristisch argument van Pomerance en Lenstra suggereerde echter dat het waarschijnlijk onjuist is.
Het algoritme
Het algoritme is als volgt:
- Invoer: geheel getal n > 1 .
- Controleer of n een volmaakte macht is : als n = a b voor gehele getallen a > 1 en b > 1 , output composiet .
- Vind de kleinste r zodanig dat orde r ( n ) > (log 2 n ) 2 . (als r en n niet coprime zijn, sla deze r dan over )
- Controleer voor alle 2 ≤ a ≤ min ( r , n −1) of a n niet deelt : Als a | n voor ongeveer 2 ≤ a ≤ min ( r , n −1), output composiet .
- Indien n ≤ r , output prime .
- Voor een = 1 om te doen
- if ( X + a ) n ≠ X n + a (mod X r - 1, n ), uitgang composiet ;
- Uitgang prime .
Hier ord r ( n ) de multiplicatieve orde van n modulo r , log 2 is de binaire logaritme , en is Euler totient functie van r .
Stap 3 wordt in het papier controleren 1 <( a , n ) < n voor een ≤ r . Het kan worden gezien dat dit equivalent is aan proefdeling tot r , wat zeer efficiënt kan worden gedaan zonder ggd te gebruiken . Op dezelfde manier kan de vergelijking in stap 4 worden vervangen door de proefdeling prime te laten retourneren nadat deze alle waarden tot en met . heeft gecontroleerd
Eenmaal voorbij zeer kleine inputs, domineert stap 5 de tijd die nodig is. De essentiële reductie in complexiteit (van exponentieel naar polynoom) wordt bereikt door alle berekeningen in de eindige ring uit te voeren
bestaande uit elementen. Deze ring bevat alleen de monomen en de coëfficiënten in die moet elementen allemaal codeerbaar in bits.
De meeste latere verbeteringen die aan het algoritme zijn aangebracht, waren gericht op het verkleinen van de grootte van r , waardoor de kernbewerking in stap 5 sneller wordt, en op het verkleinen van de grootte van s , het aantal lussen dat in stap 5 werd uitgevoerd. Deze wijzigingen veranderen doorgaans niets aan de rekenkundige complexiteit, maar kan leiden tot vele ordes van grootte die minder tijd nodig hebben, bijvoorbeeld de definitieve versie van Bernstein heeft een theoretische versnelling met een factor van meer dan 2 miljoen.
Bewijs van geldigheid overzicht
Om het algoritme correct te laten zijn, moeten alle stappen die n identificeren correct zijn. Stappen 1, 3 en 4 zijn triviaal correct, omdat ze gebaseerd zijn op directe tests van de deelbaarheid van n . Stap 5 is ook correct: aangezien (2) geldt voor elke keuze van een priemgetal naar n en r als n een priemgetal is, betekent een ongelijkheid dat n samengesteld moet zijn.
Het moeilijke geval van het algoritme is de herhaalde verklaring in stap 5. Als dit binnen de eindige Ring R toevallig resulteert in de incongruentie
dit is gelijk aan
- ,
zodat na reductie tot de r monomials door middel van alleen hoeft te worden gecontroleerd.
Voorbeeld 1: n = 31 is priem
- Invoer: geheel getal n = 31 > 1.
If n = ab for integers a > 1 and b > 1, output composite. For [ b=2, b <= log2(n), b++, a=n1/b; If [ a is integer, Return[Composite]] ]; a=n1/2...n1/4={5.568, 3.141, 2.360}Find the smallest r such that Or(n) > (log2 n)2. maxk=⌊(log2 n)2⌋; maxr=Max[3, ⌈(Log2 n)5⌉]; (*maxr really isn't needed*) nextR=True; For [r=2, nextR && r < maxr, r++, nextR=False; For [k=1,(!nextR) &&k ≤ maxk, k++, nextR=(Mod[nk, r]==1 || Mod[nk, r]==0) ] ]; r--; (*the loop over increments by one*) r = 29If 1 < gcd(a,n) < n for some a ≤ r, output composite. For [a=r, a > 1, a--, If [(gcd=GCD[a,n]) > 1 && gcd < n, Return[Composite]] ]; gcd={GCD(29,31)=1, GCD(28,31)=1, ..., GCD(2,31)=1} ≯ 1
If n ≤ r, output prime. If [n ≤ r, Return[Prime]]; (* this step may be omitted if n > 5690034 *) 31 > 29For a = 1 to do if (X+a)n≠ Xn+a (mod Xr − 1,n), output composite; φ[x_]:=EulerPhi[x]; PolyModulo[f_]:=PolynomialMod[ PolynomialRemainder[f,xr-1,x],n]; max=Floor[Log[2,n]√φ[r]]; For[a=1, a ≤ max, a++, If[PolyModulo[(x+a)n-PolynomialRemainder[xn+a, xr-1], x]≠0, Return[Composite] ] ]; (x+a)31 = a31 +31a30x +465a29x2 +4495a28x3 +31465a27x4 +169911a26x5 +736281a25x6 +2629575a24x7 +7888725a23x8 +20160075a22x9 +44352165a21x10 +84672315a20x11 +141120525a19x12 +206253075a18x13 +265182525a17x14 +300540195a16x15 +300540195a15x16 +265182525a14x17 +206253075a13x18 +141120525a12x19 +84672315a11x20 +44352165a10x21 +20160075a9x22 +7888725a8x23 +2629575a7x24 +736281a6x25 +169911a5x26 +31465a4x27 +4495a3x28 +465a2x29 +31ax30 +x31 PolynomialRemainder [(x+a)31, x29-1] = 465a2 +a31 +(31a+31a30)x +(1+465a29)x2 +4495a28x3 +31465a27x4 +169911a26x5 +736281a25x6 +2629575a24x7 +7888725a23x8 +20160075a22x9 +44352165a21x10 +84672315a20x11 +141120525a19x12 +206253075a18x13 +265182525a17x14 +300540195a16x15 +300540195a15x16 +265182525a14x17 +206253075a13x18 +141120525a12x19 +84672315a11x20 +44352165a10x21 +20160075a9x22 +7888725a8x23 +2629575a7x24 +736281a6x25 +169911a5x26 +31465a4x27 +4495a3x28 (A) PolynomialMod [PolynomialRemainder [(x+a)31, x29-1], 31] = a31+x2 (B) PolynomialRemainder [x31+a, x29-1] = a+x2 (A) - (B) = a31+x2 - (a+x2) = a31-a max = = 26 {131-1=0 (mod 31), 231-2=0 (mod 31), 331-3=0 (mod 31), ..., 2631-26=0 (mod 31)}
Output prime. 31 Must be Prime
Waarbij PolynomialMod een termgewijze modulo-reductie van de polynoom is. bijv. PolynomialMod[x+2x 2 +3x 3 , 3] = x+2x 2 +0x 3
Referenties
Verder lezen
- Dietzfelbinger, Martin (2004). Primaliteitstesten in polynomiale tijd. Van gerandomiseerde algoritmen naar PRIMES staat in P . Collegenota's in de informatica. 3000 . Berlijn: Springer-Verlag . ISBN 3-540-40344-2. Zbl 1.058,11070 .
Externe links
- Weisstein, Eric W. "AKS-primaliteitstest" . MathWereld .
- R. Crandall, Apple ACG en J. Papadopoulos (18 maart 2003): Over de implementatie van priemtests van de AKS-klasse (PDF)
- Artikel door Borneman, met foto's en informatie over de drie Indiase wetenschappers (PDF)
- Andrew Granville: Het is gemakkelijk om te bepalen of een bepaald geheel getal een priemgetal is
- De belangrijkste feiten: van Euclides tot AKS , door Scott Aaronson (PDF)
- De PRIMES staat in P kleine FAQ door Anton Stiglic
- 2006 Gödelprijs Citation
- 2006 Fulkerson Prize Citation
- De AKS "PRIMES in P"-algoritmebron
- Grime, Dr. James. "Fool-Proof Test voor priemgetallen - Numberphile" (video) . Brady Haran . [de video beschrijft de exponentiële tijdrelatie (1), die het AKS noemt]