Agrawal-Kayal-Saxena-testet ( AKS-testet ) är det enda för närvarande kända universella (det vill säga tillämpligt på alla tal) polynom , deterministiskt och ovillkorligt (det vill säga inte beroende av obevisade hypoteser) test av talens primatitet, baserat på en generalisering av Fermats lilla sats om polynom.
Om det finns ett sådant och för någon från 1 till , är det antingen ett primtal eller en potens av ett primtal.
|
Här och nedan , betecknar exponenten modulo , är den binära logaritmen och är Euler-funktionen [1] .
Jämförelse med två moduler av formuläret
för polynom betyder att det finns så att alla koefficienter av polynomet är multipler av , där är ringen av polynom från över heltal [1] .
AKS-testet föreslogs av den indiska forskaren Manindra Agrawal och hans två elever Niraj Kayal och Nitin Saxena från Indian Institute of Technology Kanpur och publicerades först den 6 augusti , 2002 [2] . Före denna publikation var det ett öppet problem att problemet med erkännande av primäritet tillhörde klassen P.
Beräkningskomplexiteten för den ursprungliga algoritmen uppskattas till . Förutsatt att Artins gissningar är sanna förbättras körtiden till . Om man antar att Sophie Germains hypotes är korrekt , tenderar tiden också att [2] .
2005 publicerade Lenstra och Pomerance en förbättrad version av algoritmen med beräkningskomplexitet , där är numret som ska kontrolleras av testet [3] [4] .
Enligt Agrawals gissning finns det en variant av algoritmen med runtime , men Lenstra och Pomerans presenterade ett heuristiskt argument som bekräftar falskheten i denna hypotes [2] .
Denna algoritm är av stor teoretisk betydelse, men används inte i praktiken, eftersom dess beräkningskomplexitet är mycket högre än den för de bästa probabilistiska algoritmerna [5] . För sin upptäckt fick författarna Gödelpriset och Fulkersonpriset 2006 [ 6] .
Algoritmens huvudsakliga egenskap är att den samtidigt är universell , polynomisk , deterministisk och ovillkorlig [5] , tidigare algoritmer hade maximalt endast tre av dessa fyra egenskaper.
Testets universalitet innebär att det kan användas för att testa primaaliteten av vilket nummer som helst. Många snabba tester är utformade för att testa siffror från en begränsad uppsättning. Till exempel fungerar Lucas-Lehmer-testet bara för Mersenne-nummer , medan Pepins test bara fungerar för Fermat-nummer [6] .
Polynom betyder att den maximala körtiden för algoritmen begränsas av ett polynom i antalet siffror i numret som kontrolleras. Samtidigt kan tester som det elliptiska kurvtestet (ECPP) och Adlemann-Pomerance-Rumeli-testet (APR) bevisa eller motbevisa enkelheten hos ett tal, men de har inte bevisats att körtiden kommer att vara polynom för valfritt inmatat nummer [6] .
Determinism garanterar ett unikt fördefinierat resultat. Probabilistiska tester , som Miller-Rabin-testet och Bailey-Pomeranz-Selfridge-Wagstaff-testet , kan testa om ett tal är primtal i polynomtid, men ger bara ett probabilistiskt svar [6] .
Ovillkorlighet är egenskapen att riktigheten av en algoritm inte beror på några obevisade hypoteser. Till exempel har Miller-testet inte den här egenskapen , som även om den är deterministisk och fungerar i polynomtid för alla inmatade tal, beror dess korrekthet på den obevisade generaliserade Riemann-hypotesen [6] .
Huvudidén med algoritmen är en generalisering av Fermats lilla sats till polynom, som säger att för alla (där ringen tas utan inverser av multiplikation och nollelement) och , är enkel om och bara om [2] [7] [8] :
|
|
ett |
Med andra ord, if , , och gcd , då är prime om och endast om villkor (1) är uppfyllt .
Detta uttryck tar tid att testa, uppskattat till , eftersom i värsta fall bör koefficienterna på vänster sida utvärderas. För att minska antalet koefficienter och komplexiteten i beräkningar valdes det att använda uttrycket [2] som ett test för enkelheten :
som erhålls genom att dividera båda delarna av det ursprungliga uttrycket med [7] .
Här är antalet värden som ska kontrolleras och värdet redan begränsat av polynomet från [8] .
I det här fallet, istället för en kvotring , betraktar vi fältet , där är en irreducibel divisor över ett ändligt fält , annorlunda än . Antalet polynom i detta fält som jämförelse utförs för uppskattas:
Agrawal, Kayal och Saxena bevisade att algoritmen kommer att returnera ett "primtal" om och bara om är ett primtal.
Lenstra och Pomerance publicerade en förbättrad version av algoritmen [8] [4] :
Inmatning: ,Här är funktionen densamma, det är ett polynom av grad större än , så att under vissa ytterligare villkor [1] [8] .
Beräkningskomplexiteten för denna algoritm är .
Motiveringen använder en grupp — en grupp av alla tal som är modulo-rester för tal från mängden [9] :
Den här undergruppen, låt oss kalla den gruppen , innehåller redan . Gruppen genereras modulo , och sedan dess .
Den andra gruppen som används i beviset, , är mängden av alla polynomrester i (primtal) modulo och . Denna grupp genereras av element i fältet och är en undergrupp till fältets multiplikativa grupp [9] .
De viktigaste mellanliggande lemman och definitioner som används i motiveringen av algoritmen [2] :
Vid utvärdering av en parameter kräver algoritmen 1 000 000 000 GB ( gigabyte ) minne för antal på 1 024 bitar. För moderna operativsystem är detta för mycket information. Om man antar att Artins hypotes och Sophie Germains hypotes om tätheten av uppsättningen av primtal är korrekt, kommer värdet på parametern uppskattad till att vara tillräckligt för algoritmen . I det här fallet räcker det med 1 GB minne. Men tills riktigheten av dessa hypoteser är bevisad, tillämpas inte algoritmen på grund av den komplexa exekveringen. Donald Knuth , som placerade algoritmen i andra volymen av The Art of Programming (Vol. 3), noterade i privat korrespondens dess rent teoretiska karaktär [6] .
Talteoretiska algoritmer | |
---|---|
Enkelhetstest | |
Hitta primtal | |
Faktorisering | |
Diskret logaritm | |
Hitta GCD | |
Modulo aritmetik | |
Multiplikation och division av tal | |
Beräkna kvadratroten |