Lucas - Lehmer-testen ( eng. Lucas-Lehmer-testen , forkortelse LLT ) er en polynomisk , deterministisk og ubetinget (det vil sige ikke afhængig af ubeviste hypoteser) primalitetstest for Mersenne-tal . Formuleret af Édouard Lucas i 1878 og bevist af Lemaire i 1930 .
Givet et primtal tillader testen polynomisk tid af bitlængden af Mersenne-tallet for at bestemme, om det er primtal eller sammensat . Beviset for testens gyldighed bygger i høj grad på Lucas-funktionerne , som gjorde det muligt at generalisere Lucas-Lehmer-testen til nogle tal, hvis form er forskellig fra Mersenne-tallene .
Takket være denne test har de største kendte primtal næsten altid været Mersenne-primtal, selv før computernes fremkomst ; det er ham, der ligger til grund for GIMPS distributed computing- projektet , som er engageret i jagten på nye Mersenne-primtal. Det er også interessant for dets forbindelse med lige perfekte tal .
Testen er baseret på følgende kriterier for enkelheden af Mersenne-tallene [1] :
Lad være et simpelt ulige tal. Et Mersenne-tal er primtal, hvis og kun hvis det deler sekvensens th led [2] ,givet rekursivt : |
For at kontrollere enkelheden beregnes talrækken modulo antallet (det vil sige, at ikke tallene i sig selv beregnes , hvis længde vokser eksponentielt , men resten efter at dividere med , hvis længde er begrænset af bits ). Det sidste tal i denne sekvens kaldes Lucas-Lehmer-resten [3] . Et Mersenne-tal er således primtal, hvis og kun hvis tallet er et ulige primtal, og Lucas-Lehmer-resten er nul. Selve algoritmen kan skrives som pseudokode [4] :
LLT (p) ►Indtast: ulige primtal s S=4 k = 1 M = 2 p − 1 Indtil k != p - 1 S = ((S × S) − 2) mod M k += 1 End of loop Hvis S = 0 udfør Return SIMPLE ellers Return COMPOUND SlutbetingelseDe værdier , som primalitetskriteriet er gyldigt for, danner en sekvens: [5] [6] [7] .
Det er ikke nødvendigt at kontrollere alle ulige primtal i direkte opregning, da nogle Mersenne-tal i en speciel form altid er sammensatte, hvilket f.eks. følger af følgende sætning bevist af Euler [ 8] :
Hvis tal og er primtal, så . |
En tilgang til beviset er baseret på brugen af Lukas funktioner :
hvor er rødderne til andengradsligningen
med en diskriminant , og og er coprime .
Især nogle egenskaber ved disse funktioner bruges i beviset, nemlig [9] :
en. 2. 3. 4. Hvis , , og , derefter 5. Hvis er prime, sådan at coprime med , så dividerer med , hvor , og er Legendre-symbolet .Bevisskema [9] :
Fra ejendom 4. modulo for , , følger:
,og af ejendom 2.
,derfor
og
, så hvis er prime, så deler den sig også fra de to sidste egenskaber
Yderligere fra egenskab 1. og 2.
,men af ejendom 3.
,det vil sige deler , og dermed .
Hvis den deler sig , så følger det af nødvendighedsbeviset , at den deler og . coprime med ved egenskab 1., og ved egenskab 2. - dividerer . Men så kan hver primtalsdivisor af tallet repræsenteres som , altså primtal.
Kriteriet om enkelhed blev foreslået af den franske matematiker Lucas i 1878 . Især Lucas viste, at algoritmen tillader primalitetstestning for primtal [9] . I 1930 beviste den amerikanske matematiker Lehmer fuldt ud gyldigheden af kriteriet for alle ulige primtal i sin afhandling for graden af Doctor of Philosophy [1] .
I 1952 udførte Robinson med støtte fra Lemaire beregninger på SWAC -computeren ved hjælp af Luc-Lehmer-testen, hvilket resulterede i opdagelsen af primtal og . Senere samme år blev , og [10] opdaget .
Den lette implementering af testen og væksten i computerkraften tillod praktisk talt alle at søge efter Mersenne-primtal. Så i 1978 beviste to amerikanske high school-elever Laura Nickel og Kurt Knoll (Lemaire lærte dem talteori) tallets enkelhed i 3 års arbejde ved hjælp af CDC Cyber 176 supercomputeren ved University of California [11] .
Den største kendte Mersenne prime for 2018, opnået ved hjælp af Lucas-Lehmer testen, er .
Ulighedskravet i kriteriets tilstand er væsentligt, da det er enkelt , men .
Tallet er primtal [13] . Virkelig,
Anvendelse af testen på et tal viser, at det er sammensat [13] :
Faktisk ,.
Der er to hovedoperationer i testen under overvejelse: kvadrering og modulopdeling . En effektiv algoritme for modulo et Mersenne-tal på en computer (faktisk reduceret til et par bitskifteoperationer ) er givet ved følgende sætning [4] :
For et heltal og et Mersenne-tal finder modulo-kongruens sted ,desuden er multiplikation med modulo ækvivalent med et venstre cyklisk skift med en bit (hvis , så udføres skiftet i den modsatte retning). |
For at beregne resten af at dividere et tal med , skal du for eksempel konvertere det oprindelige tal til binær form: , og ifølge sætningen opdeles i to dele, hver gang det overstiger :
Ved brug af denne modulo-metode vil den beregningsmæssige kompleksitet af testen blive bestemt af kompleksiteten af kvadreringsalgoritmen. Længden er lidt, og algoritmen til at gange to tal, for eksempel "i en kolonne", har kompleksitet [4] . Da kvadrering forekommer én gang i testen, er algoritmens beregningsmæssige kompleksitet [14] . Testen kan accelereres ved at bruge hurtige multiplikationsalgoritmer for store heltal, såsom Schönhage-Strassen multiplikationsmetoden . Testens kompleksitet i dette tilfælde vil være .
Tilstanden i testen kan svækkes [8] og kræver kun det , hvilket umiddelbart indebærer:
.I 1930 udledte Lemaire et primalitetskriterium for tal af formen , hvor , og i 1969 ændrede Hans Riesel Lucas-Lehmer-testen for tal af denne form, som senere blev suppleret af Stechkin [9] . Det er muligt at generalisere testen til tal på formen [15] .
Williams beviste primalitetskriterier svarende til Luc-Lehmer-testen for tal af formenog, såvel som for nogle tal af formen, hvor er et primtal [9] .
Der er en mere generel primatitetstest , som er anvendelig for ethvert naturligt tal , hvis den fulde eller delvise faktorisering af tallet eller [4] er kendt .
Takket være Lucas-Lehmer-testen holder Mersenne-primtallene føringen som de største kendte primtal , selvom selv før testens eksistens var Mersenne-tal næsten altid de største primtal. Så i 1588 blev tallenes enkelhed bevist [16] .
Euklid beviste, at et hvilket som helst tal på formen er perfekt , hvis er primtal, og Euler viste, at alle lige perfekte tal har denne form [17] ; så Luc-Lehmer-testen giver dig faktisk mulighed for at finde alle lige perfekte tal.
Det er denne test, der ligger til grund for GIMPS distributed computing- projektet , som leder efter nye Mersenne-primtal [18] , selvom det endnu ikke er bevist, at der er uendeligt mange af dem [19] .
Denne test bruges også til at teste hardware . For eksempel, i 1992 testede AEA Technology en ny supercomputer fra Cray ved hjælp af et program skrevet af Slowinski for at finde Mersenne-primtal. Som et resultat blev et primtal opdaget efter 19 timers programdrift [20] .
Talteoretiske algoritmer | |
---|---|
Enkelthedstest | |
At finde primtal | |
Faktorisering |
|
Diskret logaritme | |
Finder GCD | |
Modulo aritmetik | |
Multiplikation og division af tal | |
Beregning af kvadratroden |