Nov 09 2008

El test de Lucas-Lehmer

Published by admin at 10:43 am under Métodos matemáticos

En mi post de ayer hablaba sobre los dos últimos gigantescos primos de Mersenne descubiertos y decía que se demostraba su primalidad mediante el llamado test de Lucas-Lehmer.

Vamos a intentar describirlo pues es sencillo.

Algoritmo

El test de Lucas-Lehmer permite determinar de manera eficiente si un número de Mersenne es o no primo. El algoritmo es como sigue:

  • Sea p un número primo y Mp = 2p - 1 el número de Mersenne correspondiente.
  • Sea x0 = 4
  • Desde i= 1 hasta p-2: calcular xi = (xi-1 2 - 2) mod Mp

Entonces Mp es primo si y solo si el último xi calculado (es decir xp-2) es cero.

Código fuente

Incluimos un sencillo código fuente en Python (enlace al final) para comprobar si M_p es o no primo.

He aquí un ejemplo de ejecución:

 ./Lucas_Lehmer.py 9689
M_9689 =
47822027880546120295283929866000590974149717240223
65008513345109918378950942662970278927686112707894
58682472098152425631930658505267683408748083442943
32647974258932476236883310216332089548473548057999
43341309825989013743806187109581043148680813778321
53049671560156328262441404039814320762203627219040
85907905372034752561055640715792638678752409855733
56522656108542128577321057879052328865035355873615
67936365588992571157442015383209175242284304691881
14274006621355593035168537039768126863857503762277
87949580582081831261725701003498206512329872677233
48951095346937568303703837399969677158578890563911
55226134054957071845241582192082237664420590145933
30657009722153962376853423770486138578089775621301
16781129916640736174660669780818675796691467124607
37129042005884089231863877378876752928869537970669
80967406053530122853539036965490224784924649007954
89867850331465554647550450168618735486696437455261
41206407829496224520277889621386026659331476876963
22089504278791624651519312327831756553779377194524
67339581928148666857638401959072017941334958297031
93938843888104945460403420875365636283321520731816
14300721769371426238517540520845214665313301183551
96259184955893849902534878037671647707393063443684
00844682559374434516903159993491376646389689726141
99015304906547819056227171224947070739716300953775
74344130792050186353223446654564569577433188504497
82501486634673721303920998948521451909982328787724
86650513010816769902892518719250066947215706536216
24869624056925686555429622155221156042777866254593
69988010701861626014764742934598301836512733634627
32675883060701410359254829149774339297173680765610
95959991130918978823835013163567266143596921823997
71969338743954039966236755805282112071363963708580
56051160781770985452576988032333812939272752101944
62952749031383555198519709592888523641530178921867
51410145412030961912709343690395220982803176689420
61325572349643638403056487349290884223786292887472
23121903238528103409182430661894774072726552428489
33044748614549420767990417394471658382816714104358
31206790501914527326287370339974707206016882562827
40427017032260672798034347932642573009183981307771
93224553947639606065882143266031561414907405576980
55166263044447583756711516490181193442236859424151
84379538933576543212994405485534515585927342456182
51468137147206062877810212409237080214922983496351
79527270302962970156927686511635050080407282674252
36264469571076976886613730278931360967438271901738
55084846633734761208435679830650595580729351106375
44240807350667082987233779768874938983584523095638
99612061631863439196711208646438464947096323007272
92009125861472679997624967098527695035357339244162
02657720741248683592202828983311140833923302433917
79797699031142584361935093675448381119440881276338
80842044518049124543838841808009452756266680576289
54763384641305107753773247082495804533355717481965
02507081973046642282610569751056428979895118219288
59763522290538989487376146421399109115358645058189
92696826225754111 es primo.

Con esto el programa comprueba en pocos minutos que M9689 un número con
2917 dígitos es efectivamente primo (el número 21 en la lista de primos de Mersenne).

Código fuente: Test de Lucas-Lehmer

Trackback URI | Comments RSS

Leave a Reply