Lucas-Lehmer test ( angl. Lucas -Lehmer test , zkr. LLT ) je polynomiální , deterministický a nepodmíněný (tj. nezávislý na neprokázaných hypotézách) test primality pro Mersennova čísla . Formuloval Édouard Lucas v roce 1878 a dokázal Lemaire v roce 1930 .
Dané prvočíslo počítá s polynomiálním časem bitové délky Mersennova čísla k určení, zda je prvočíslo nebo složené . Důkaz platnosti testu se do značné míry opírá o Lucasovy funkce , které umožnily zobecnit Lucas-Lehmerův test na některá čísla, jejichž tvar je odlišný od Mersennových čísel .
Díky tomuto testu byla největší známá prvočísla téměř vždy Mersennova prvočísla, dokonce ještě před příchodem počítačů ; je to on, kdo stojí za projektem distribuovaných počítačů GIMPS , který se zabývá hledáním nových Mersennových prvočísel. Zajímavý je také spojením se sudými čísly .
Test je založen na následujících kritériích jednoduchosti Mersennových čísel [1] :
Nechť je jednoduché liché číslo. Mersennovo číslo je prvočíslo právě tehdy, když dělí tý člen posloupnosti [2] ,dáno rekurzivně : |
Pro kontrolu jednoduchosti se posloupnost čísel počítá modulo the number (tedy nepočítají se samotná čísla , jejichž délka roste exponenciálně , ale zbytky po dělení , jejichž délka je omezena bity ). Poslední číslo v této sekvenci se nazývá Lucas-Lehmerův zbytek [3] . Mersennovo číslo je tedy prvočíslo právě tehdy, když je toto číslo liché prvočíslo a Lucas-Lehmerův zbytek je nula. Samotný algoritmus lze zapsat jako pseudokód [4] :
LLT (p) ►Vstup: liché prvočíslo p S=4 k = 1 M = 2 p − 1 Dokud k != p - 1 S = ((S × S) − 2) mod M k += 1 Konec smyčky Pokud S = 0 proveďte Return SIMPLE jinak Return COMPOUND Koncová podmínkaHodnoty , pro které platí kritérium primality, tvoří sekvenci: [5] [6] [7] .
Není nutné kontrolovat všechna prvočísla lichá čísla v přímém výčtu, protože některá Mersennova čísla speciálního tvaru jsou vždy složená, což vyplývá například z následující věty dokázané Eulerem [ 8] :
Jsou-li čísla a prvočísla, pak . |
Jeden přístup k důkazu je založen na použití Lukeových funkcí :
kde jsou kořeny kvadratické rovnice
s diskriminantem a a jsou coprime .
V důkazu jsou použity zejména některé vlastnosti těchto funkcí, konkrétně [9] :
jeden. 2. 3. 4. Pokud , , a , pak 5. Jestliže je prvočíslo, takové, že coprime s , pak dělí , kde , a je Legendre symbol .Důkazní schéma [9] :
Z vlastnosti 4. modulo for , vyplývá:
,a podle majetku 2.
,proto
a
, takže pokud je prvočíslo, pak se také dělí od posledních dvou vlastností
Dále z vlastností 1. a 2.
,ale podle majetku 3.
,to je, rozděluje , a proto .
Pokud rozděluje , pak z důkazu nutnosti vyplývá , že rozděluje a . spoluvlastní se podle vlastnosti 1. a podle vlastnosti 2. - dělí . Ale pak každý prvočíselník čísla může být reprezentován jako , tedy prvočíslo.
Kritérium jednoduchosti navrhl francouzský matematik Lucas v roce 1878 . Zejména Lucas ukázal, že algoritmus umožňuje testování prvočísel pro prvočísla [9] . V roce 1930 americký matematik Lehmer plně prokázal platnost kritéria pro všechna lichá prvočísla ve své disertační práci pro titul doktora filozofie [1] .
V roce 1952 provedl Robinson s podporou Lemaire výpočty na počítači SWAC pomocí Luc-Lehmerova testu, který vyústil v objev prvočísel a . Později ve stejném roce byly objeveny , a [10] .
Snadná implementace testu a růst výpočetního výkonu počítačů umožnil prakticky komukoli hledat Mersennova prvočísla. Takže v roce 1978 dva američtí středoškoláci Laura Nickel a Kurt Knoll (Lemaire je naučil teorii čísel) prokázali jednoduchost čísel za 3 roky práce pomocí superpočítače CDC Cyber 176 na University of California [11] .
Největší známé Mersennovo prvočíslo pro rok 2018 získané pomocí Lucas-Lehmerova testu je .
Požadavek na zvláštnost v podmínce kritéria je zásadní, protože je jednoduchý , ale .
Číslo je prvočíslo [13] . Opravdu,
Použití testu na číslo ukazuje, že je složené [13] :
Opravdu, .
V uvažovaném testu jsou dvě hlavní operace: kvadratura a dělení modulo . Efektivní algoritmus pro modulo a Mersennovo číslo na počítači (ve skutečnosti redukující na operace s několika bitovým posunem ) je dán následující větou [4] :
Pro celé číslo a Mersennovo číslo nastává modulová kongruence ,navíc násobení modulem je ekvivalentní levému cyklickému posunu o bit (jestliže , pak se posun provede v opačném směru). |
Chcete-li například vypočítat zbytek po dělení čísla číslem , musíte převést původní číslo do binárního tvaru: a podle věty se rozdělit na dvě části pokaždé, když překročí :
Při použití této modulo metody bude výpočetní složitost testu určena složitostí kvadratického algoritmu. Délka je bit a algoritmus pro násobení dvou čísel, například "ve sloupci", je složitý [4] . Protože kvadratura nastane jednou v testu, výpočetní složitost algoritmu je [14] . Test lze urychlit použitím rychlých násobicích algoritmů pro velká celá čísla, jako je Schönhage-Strassenova metoda násobení . Složitost testu v tomto případě bude .
Podmínka v testu může být oslabena [8] a vyžaduje pouze to , z čehož bezprostředně vyplývá:
.V roce 1930 Lemaire odvodil kritérium primality pro čísla ve tvaru , kde , a v roce 1969 Hans Riesel upravil Lucas-Lehmerův test pro čísla tohoto tvaru, který později doplnil Stechkin [9] . Test je možné zobecnit na čísla tvaru [15] .
Williams dokázal kritéria primality podobná Luc-Lehmerovu testu pro čísla ve tvarua, stejně jako pro některá čísla ve tvaru, kde je prvočíslo [9] .
Existuje obecnější test primality , který je použitelný pro jakékoli přirozené číslo , pokud je známa úplná nebo částečná rozklad čísla nebo [4] .
Díky Lucas-Lehmerově testu drží Mersennova prvočísla prvenství jako největší známá prvočísla , i když ještě před existencí testu byla Mersennova čísla téměř vždy největšími prvočísly. Takže v roce 1588 byla prokázána jednoduchost čísel a [16] .
Euclid dokázal, že jakékoli číslo tvaru je dokonalé , pokud je prvočíslo, a Euler ukázal, že všechna sudá dokonalá čísla mají tento tvar [17] ; takže Luc-Lehmerův test vám vlastně umožňuje najít všechna sudá dokonalá čísla.
Právě tento test je základem projektu distribuovaných výpočtů GIMPS , který hledá nová Mersennova prvočísla [18] , i když zatím nebylo prokázáno, že jich je nekonečně mnoho [19] .
Tento test se také používá k testování hardwaru . Například v roce 1992 AEA Technology testovala nový superpočítač od Cray pomocí programu napsaného Slowinskim k nalezení Mersennova prvočísel. Výsledkem bylo, že za 19 hodin provozu programu bylo objeveno prvočíslo [20] .
Číselné teoretické algoritmy | |
---|---|
Testy jednoduchosti | |
Hledání prvočísel | |
Faktorizace | |
Diskrétní logaritmus | |
Hledání GCD | |
Modulová aritmetika | |
Násobení a dělení čísel | |
Výpočet druhé odmocniny |