AKS primitetstest - AKS primality test

Den AKS primality test (også kjent som Agrawal-Kayal-Saxena primality test og cyclotomic AKS test ) er en deterministisk primality-beviser algoritme laget og publisert av Manindra Agrawal , Neeraj Kayal , og Nitin Saxena , dataforskere ved Indian Institute of Technology Kanpur , 6. august 2002, i en artikkel med tittelen "PRIMES is in P". Algoritmen var den første som beviselig kan avgjøre om et gitt tall er primtall eller sammensatt i polynomtid , uten å stole på matematiske formodninger som den generaliserte Riemann -hypotesen . Beviset er også kjent for ikke å stole på analyseområdet . I 2006 mottok forfatterne både Gödelprisen og Fulkersonprisen for arbeidet sitt.

Betydning

AKS er den første primalitetsbevisende algoritmen som samtidig er generell , polynom , deterministisk og ubetinget . Tidligere algoritmer hadde blitt utviklet i århundrer og oppnådde maksimalt tre av disse egenskapene, men ikke alle fire.

  • AKS -algoritmen kan brukes til å verifisere primiteten til et gitt generelt tall. Mange raske primitetstester er kjent som bare fungerer for tall med visse egenskaper. For eksempel fungerer Lucas - Lehmer -testen bare for Mersenne -tall , mens Pépins test bare kan brukes på Fermat -tall .
  • Maksimal kjøretid for algoritmen kan uttrykkes som et polynom over antall sifre i målnummeret. ECPP og APR beviser eller motbeviser definitivt at et gitt tall er primtall, men er ikke kjent for å ha polynomiske tidsgrenser for alle innganger.
  • Algoritmen skiller garantert deterministisk om målnummeret er primtall eller sammensatt. Randomiserte tester, som Miller - Rabin og Baillie - PSW , kan teste et gitt tall for primalitet i polynomtiden, men er kjent for å gi bare et sannsynlighetsresultat.
  • Riktigheten av AKS er ikke betinget på noen datterselskap uprøvd hypotese . I kontrast er Millers versjon av Miller – Rabin-testen fullt deterministisk og går i polynomisk tid over alle innspill, men korrektheten avhenger av sannheten i den ennå ikke-påviste generaliserte Riemann-hypotesen .

Selv om algoritmen er av enorm teoretisk betydning, brukes den ikke i praksis, noe som gjør den til en galaktisk algoritme . For 64-biters innganger er Baillie-PSW primitetstest deterministisk og kjører mange størrelsesordener raskere. For større innganger er ytelsen til (også ubetinget korrekt) ECPP- og APR -tester langt bedre enn AKS. I tillegg kan ECPP sende ut et primitetssertifikat som tillater uavhengig og rask verifisering av resultatene, noe som ikke er mulig med AKS -algoritmen.

Begreper

Den AKS primality test er basert på det følgende teorem: Gitt et helt tall og heltall coprime til , er prim hvis og bare hvis den polynomet kongruens relasjon

 

 

 

 

( 1 )

holder seg inne i polynomringen . Merk at den angir det ubestemte som genererer denne polynomiske ringen.

Denne setningen er en generalisering til polynomer av Fermats lille teorem . I en retning kan det enkelt bevises ved bruk av binomialsetningen sammen med følgende egenskap til binomialkoeffisienten :

for alle hvis er prime.

Selv om forholdet ( 1 ) utgjør en primitetstest i seg selv, bekrefter det at det tar eksponentiell tid : Brute force -tilnærmingen vil kreve utvidelse av polynomet og en reduksjon av de resulterende koeffisientene.

Kongruensen er en likhet i polynomringen . Evaluering i en kvotering av skaper en øvre grense for graden av polynomene som er involvert. AKS vurderer likheten i , noe som gjør beregningskompleksiteten avhengig av størrelsen på . For klarhet uttrykkes dette som kongruens

 

 

 

 

( 2 )

som er det samme som:

 

 

 

 

( 3 )

for noen polynomer og .

Vær oppmerksom på at alle primtalene tilfredsstiller denne relasjonen (å velge i ( 3 ) gir ( 1 ), som gjelder for prime). Denne kongruensen kan kontrolleres i polynomtiden når den er polynom til sifrene . AKS -algoritmen evaluerer denne kongruensen for et stort sett med verdier, hvis størrelse er polynom i forhold til sifrene . Beviset på gyldigheten av AKS -algoritmen viser at man kan finne et og et sett med verdier med egenskapene ovenfor slik at hvis kongruensene holder, er det en kraft av et primtall.

Historie og kjøretid

I den første versjonen av det ovennevnte papiret viste forfatterne at algoritmens asymptotiske tidskompleksitet var (ved bruk av Õ fra stor O-notasjon )-den tolvte kraften i antall sifre i n ganger en faktor som er polylogaritmisk i antall siffer. Denne øvre grensen var imidlertid ganske løs; en utbredt formodning om fordelingen av Sophie Germain-primtalene ville, hvis det var sant, umiddelbart kutte det verste tilfellet ned til .

I månedene etter oppdagelsen dukket det opp nye varianter (Lenstra 2002, Pomerance 2002, Berrizbeitia 2002, Cheng 2003, Bernstein 2003a/b, Lenstra og Pomerance 2003), noe som forbedret beregningshastigheten sterkt. På grunn av eksistensen av de mange variantene, refererer Crandall og Papadopoulos til "AKS-klassen" av algoritmer i sitt vitenskapelige papir "Om implementering av AKS-klasse primitetstester", publisert i mars 2003.

Som svar på noen av disse variantene, og på andre tilbakemeldinger, ble papiret "PRIMES is in P" oppdatert med en ny formulering av AKS -algoritmen og dens korrekthetsbevis. (Denne versjonen ble til slutt publisert i Annals of Mathematics .) Mens grunnideen forble den samme, ble r valgt på en ny måte, og beviset på korrekthet ble mer sammenhengende organisert. Det nye beviset stolte nesten utelukkende på oppførselen til syklotomiske polynomer over begrensede felt . Den nye øvre grensen for tidskompleksitet ble senere redusert ved hjelp av tilleggsresultater fra sileteori til .

I 2005 demonstrerte Pomerance og Lenstra en variant av AKS som kjører i drift, noe som førte til en annen oppdatert versjon av papiret. Agrawal, Kayal og Saxena foreslo en variant som ville løpe inn hvis Agrawals formodning var sann; et heuristisk argument fra Pomerance og Lenstra antydet imidlertid at det sannsynligvis er usant.

Algoritmen

Algoritmen er som følger:

Inndata: heltall n  > 1 .
  1. Sjekk om n er en perfekt effekt : hvis n  =  a b for heltall a  > 1 og b  > 1 , send ut kompositt .
  2. Finn den minste r slik at ord r ( n )> (log 2 n ) 2 . (hvis r og n ikke er coprime, så hopp over denne r )
  3. For alle 2 ≤ a ≤ min ( r , n −1), kontroller at a ikke deler n : Hvis a | n for noen 2 ≤ en ≤ min ( r , n -1), utgang kompositt .
  4. Hvis nr , send ut prim .
  5. For a  = 1 å gjøre
    if ( X + et ) nX n + et (mod X r - 1, N ), utgangs kompositt ;
  6. Utgangs prime .

Her er ord r ( n ) multiplikasjonsrekkefølgen til n modulo r , log 2 er den binære logaritmen , og er Eulers totientfunksjon av r .

Trinn 3 er vist i papiret ved å kontrollere 1 <( a , n ) < n for alle ar . Det kan sees at dette tilsvarer prøvedeling opp til r , noe som kan gjøres veldig effektivt uten å bruke gcd . På samme måte kan sammenligningen i trinn 4 erstattes med at prøvedivisjonen returnerer prime når den har kontrollert alle verdier til og med

Når det en gang går utover veldig små innganger, dominerer trinn 5 tiden det tar. Den vesentlige reduksjonen i kompleksitet (fra eksponentiell til polynom) oppnås ved å utføre alle beregninger i den endelige ringen

bestående av elementer. Denne ringen inneholder bare monomialene , og koeffisientene er i som har elementer som alle kan kodes i biter.

De fleste senere forbedringer av algoritmen har konsentrert seg om å redusere størrelsen på r, noe som gjør kjerneoperasjonen i trinn 5 raskere, og ved å redusere størrelsen på s , antall løkker utført i trinn 5. Vanligvis endrer disse endringene ikke beregningen kompleksitet, men kan føre til at mange størrelsesordner tar mindre tid, f.eks. har Bernsteins siste versjon en teoretisk fart med en faktor på over 2 millioner.

Bevis på gyldighetsoversikt

For at algoritmen skal være korrekt, må alle trinnene som identifiserer n være riktige. Trinn 1, 3 og 4 er trivielt riktige, siden de er basert på direkte tester av delbarheten til n . Trinn 5 er også riktig: siden (2) er sant for ethvert valg av en coprime til n og r hvis n er prime, betyr en ulikhet at n må være sammensatt.

Algoritmens vanskelige tilfelle er den itererte uttalelsen i trinn 5. Hvis dette i den endelige ringen R tilfeldigvis resulterer i inkongruens

dette tilsvarer

,

slik at etter å ha redusert til r monomialer ved hjelp av bare må kontrolleres for.

Eksempel 1: n = 31 er primtall

Inndata: heltall n  = 31> 1.
  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}
    
  2.   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 = 29
    
  3.   If 1 < gcd(a,n) < n for some ar, 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
    
  4.   If nr, output prime.
        If [n ≤ r, Return[Prime]]; (* this step may be omitted if n > 5690034 *)
         
        31 > 29
    
  5.   For a = 1 to  do
        if (X+a)nXn+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)}
    
  6.   Output prime.
        31 Must be Prime
    

Der PolynomialMod er en termisk modulomdannelse av polynomet. f.eks PolynomialMod [x +2x 2 +3x 3 , 3] = x +2x 2 +0x 3

Referanser

Videre lesning

Eksterne linker