Testul Lucas-Lehmer ( ing. testul Lucas-Lehmer , abreviat LLT ) este un test de primalitate polinom , determinist și necondiționat (adică nu depinde de ipoteze nedemonstrate) pentru numerele Mersenne . Formulat de Édouard Lucas în 1878 și dovedit de Lemaire în 1930 .
Având în vedere un număr prim , testul permite timpul polinomial al lungimii de biți a numărului Mersenne pentru a determina dacă este prim sau compus . Dovada validității testului se bazează în mare măsură pe funcțiile Lucas , care au făcut posibilă generalizarea testului Lucas-Lehmer la unele numere a căror formă este diferită de numerele Mersenne .
Datorită acestui test, cele mai mari numere prime cunoscute au fost aproape întotdeauna numere prime Mersenne, chiar înainte de apariția computerelor ; el este cel care stă la baza proiectului de calcul distribuit GIMPS , care este angajat în căutarea de noi numere prime Mersenne. Este interesant și pentru legătura cu numerele pare perfecte .
Testul se bazează pe următoarele criterii pentru simplitatea numerelor Mersenne [1] :
Să fie un simplu număr impar. Un număr Mersenne este prim dacă și numai dacă împarte al treilea termen al șirului [2] ,dat recursiv : |
Pentru a verifica simplitatea , succesiunea de numere este calculată modulo numărul (adică nu se calculează numerele în sine , a căror lungime crește exponențial , ci resturile după împărțirea la , a căror lungime este limitată de biți ). Ultimul număr din această secvență se numește restul Lucas-Lehmer [3] . Astfel, un număr Mersenne este prim dacă și numai dacă numărul este un prim impar și restul Lucas-Lehmer este zero. Algoritmul în sine poate fi scris ca pseudocod [4] :
LLT (p) ►Introducere: număr prim impar p S=4 k = 1 M = 2 p − 1 Până la k != p - 1 S = ((S × S) − 2) mod M k += 1 Sfârșitul buclei Dacă S = 0 executați Return SIMPLE altfel Returnați COMPOUND Condiția de sfârșitValorile pentru care criteriul de primalitate este valabil formează o secvență: [5] [6] [7] .
Nu este necesar să se verifice toate numerele prime impare în enumerarea directă, deoarece unele numere Mersenne de o formă specială sunt întotdeauna compuse, ceea ce decurge, de exemplu, din următoarea teoremă demonstrată de Euler [ 8] :
Dacă numerele și sunt prime, atunci . |
O abordare a dovezii se bazează pe utilizarea funcțiilor lui Luke :
unde sunt rădăcinile ecuației pătratice
cu un discriminant și și sunt coprime .
În special, unele proprietăți ale acestor funcții sunt utilizate în demonstrație, și anume [9] :
unu. 2. 3. 4. Dacă , , și , apoi 5. Dacă este prim, astfel încât coprim cu , atunci se împarte la , unde , și este simbolul Legendre .Schema de probă [9] :
Din proprietatea 4. modulo pentru , , rezultă:
,și după proprietatea 2.
,de aceea
și
, deci dacă este prim, atunci se împarte și de ultimele două proprietăți
În plus, din proprietățile 1. și 2.
,dar prin proprietatea 3.
,adică împarte , și deci .
Dacă se împarte , atunci din dovada necesităţii rezultă că împarte şi . coprim cu prin proprietatea 1., iar prin proprietatea 2. - împarte . Dar atunci fiecare divizor prim al numărului poate fi reprezentat ca , adică , prim.
Criteriul simplității a fost propus de matematicianul francez Lucas în 1878 . În special, Lucas a arătat că algoritmul permite testarea primalității pentru numere prime [9] . În 1930, matematicianul american Lehmer a dovedit pe deplin validitatea criteriului pentru toate numerele prime impare în disertația sa pentru gradul de doctor în filozofie [1] .
În 1952, cu sprijinul lui Lemaire, Robinson a efectuat calcule pe computerul SWAC folosind testul Luc-Lehmer, care a dus la descoperirea numerelor prime și . Mai târziu, în același an, au fost descoperite și [10] .
Ușurința de implementare a testului și creșterea puterii de calcul a computerelor au permis practic oricui să caute numere prime Mersenne. Așadar, în 1978, doi liceeni americani Laura Nickel și Kurt Knoll (Lemaire i-a predat teoria numerelor) au dovedit simplitatea numărului în 3 ani de muncă folosind supercomputerul CDC Cyber 176 de la Universitatea din California [11] .
Cel mai mare prim Mersenne cunoscut pentru 2018, obținut cu ajutorul testului Lucas-Lehmer, este .
Cerința de ciudat în condiția criteriului este esențială, deoarece este simplă , dar .
Numărul este prim [13] . Într-adevăr,
Aplicarea testului unui număr arată că acesta este compus [13] :
Într-adevăr, .
Există două operații principale în testul luat în considerare: pătratul și împărțirea modulo . Un algoritm eficient pentru modulo un număr Mersenne pe un computer (reducându-se de fapt la câteva operații de deplasare de biți ) este dat de următoarea teoremă [4] :
Pentru un întreg și un număr Mersenne , are loc congruența modulo ,în plus, înmulțirea cu modulo este echivalentă cu o deplasare ciclică la stânga cu un bit (dacă , atunci deplasarea este efectuată în direcția opusă). |
De exemplu, pentru a calcula restul împărțirii unui număr la , trebuie să convertiți numărul original în formă binară: și, conform teoremei, împărțiți în două părți de fiecare dată când depășește :
Când se utilizează această metodă modulo, complexitatea de calcul a testului va fi determinată de complexitatea algoritmului de pătrare. Lungimea este puțin, iar algoritmul de înmulțire a două numere, de exemplu, „într-o coloană”, are complexitate [4] . Deoarece pătratul are loc o dată în test, complexitatea de calcul a algoritmului este [14] . Testul poate fi accelerat prin utilizarea algoritmilor de multiplicare rapidă pentru numere întregi mari, cum ar fi metoda de înmulțire Schönhage-Strassen . Complexitatea testului în acest caz va fi de .
Condiția din test poate fi slăbită [8] și necesită doar aceea , ceea ce implică imediat:
.În 1930, Lemaire a derivat un criteriu de primalitate pentru numerele de forma , unde , iar în 1969 Hans Riesel a modificat testul Lucas-Lehmer pentru numerele de această formă, care a fost completat ulterior de Stechkin [9] . Este posibil să se generalizeze testul la numere de forma [15] .
Williams a demonstrat criterii de primalitate similare testului Luc-Lehmer pentru numere de formași, precum și pentru unele numere de forma, unde este prim [9] .
Există un test de primalitate mai general , care este aplicabil pentru orice număr natural , dacă se cunoaște factorizarea totală sau parțială a numărului sau [4] .
Datorită testului Lucas-Lehmer, numerele prime Mersenne dețin liderul ca fiind cele mai mari numere prime cunoscute , deși chiar înainte de existența testului, numerele Mersenne erau aproape întotdeauna cele mai mari numere prime. Deci, în 1588, simplitatea numerelor și a fost dovedită [16] .
Euclid a demonstrat că orice număr de formă este perfect dacă este prim, iar Euler a arătat că toate numerele perfecte par au această formă [17] ; astfel încât testul Luc-Lehmer vă permite de fapt să găsiți toate numerele pare perfecte.
Acesta este testul care stă la baza proiectului de calcul distribuit GIMPS , care caută noi numere prime Mersenne [18] , deși nu s-a dovedit încă că există o infinitate de ele [19] .
Acest test este folosit și pentru a testa hardware -ul . De exemplu, în 1992, AEA Technology a testat un nou supercomputer de la Cray folosind un program scris de Slowinski pentru a găsi numerele prime Mersenne. Ca rezultat, un număr prim a fost descoperit în 19 ore de funcționare a programului [20] .
Algoritmi teoretici numerelor | |
---|---|
Teste de simplitate | |
Găsirea numerelor prime | |
Factorizarea | |
Logaritm discret | |
Găsirea GCD | |
Modul de aritmetică | |
Înmulțirea și împărțirea numerelor | |
Calcularea rădăcinii pătrate |