Lucas-Lehmer-Test

Lucas-Lehmer-Test
Ausschnitt von Seite 316 der Arbeit Théorie des Fonctions Numériques Simplement Périodiques von Édouard Lucas (1878)

Der Lucas-Lehmer-Test ist ein Primzahltest für Mersenne-Zahlen, das heißt für Zahlen der Form Mn = 2n − 1. Der Test wird im GIMPS-Projekt (engl.: Great Internet Mersenne Prime Search), der Suche nach bisher nicht bekannten Mersenne-Primzahlen, angewandt.

Dieser Test beruht auf Eigenschaften der Lucas-Folgen und nicht wie der Lucas-Test auf dem kleinen Fermatschen Satz.

Inhaltsverzeichnis

Funktionsweise

Der Lucas-Lehmer-Test ist zum Testen von Mersenne-Zahlen ab M3 geeignet. Er basiert ganz wesentlich darauf, dass die Mersenne-Zahlen im Dualsystem nur aus lauter Einsen bestehen und funktioniert wie folgt:

Sei p ungerade und prim. Die Folge S(k) sei definiert durch S(1) = 4, S(k+1) = S(k)2–2.
Dann gilt: Mp = 2p–1 ist genau dann eine Primzahl, wenn S(p–1) durch Mp teilbar ist.[1]

Dieser Satz wurde 1930 von Derrick Lehmer gefunden und geht auf Édouard Lucas zurück (siehe Abbildung). Mit Hilfe der Kongruenzschreibweise lässt sich der Satz so formulieren:

Sei S(1) = 4, S(k+1) ≡ S(k)2–2 mod Mp. Dann gilt: Mp ist genau dann eine Primzahl, wenn S(p–1) ≡ 0 mod Mp.

Beispiele

Beispiel 1: Wir prüfen mit diesem Verfahren, ob M5 = 25–1 = 31 eine Primzahl ist:

 S(1) = 4
 S(2) = ( 4² - 2) mod 31 = 14
 S(3) = (14² - 2) mod 31 =  8
 S(4) = ( 8² - 2) mod 31 =  0

Da S(4) = 0 ist, ist M5 = 31 eine Primzahl.

Beispiel 2: Wir prüfen, ob M11 = 211–1 = 2047 eine Primzahl ist:

 S( 1) = 4
 S( 2) = (   4² - 2) mod 2047 =   14
 S( 3) = (  14² - 2) mod 2047 =  194
 S( 4) = ( 194² - 2) mod 2047 =  788
 S( 5) = ( 788² - 2) mod 2047 =  701
 S( 6) = ( 701² - 2) mod 2047 =  119
 S( 7) = ( 119² - 2) mod 2047 = 1877
 S( 8) = (1877² - 2) mod 2047 =  240
 S( 9) = ( 240² - 2) mod 2047 =  282
 S(10) = ( 282² - 2) mod 2047 = 1736

Da S(10) > 0 ist, ist M11 = 2047 keine Primzahl (es gilt 2047 = 23·89).

Beispiel 3: Wir prüfen, ob M19 = 219–1 = 524287 eine Primzahl ist:

 S( 1) = 4
 S( 2) = (      4² - 2) mod 524287 =     14
 S( 3) = (     14² - 2) mod 524287 =    194
 S( 4) = (    194² - 2) mod 524287 =  37634
 S( 5) = (  37634² - 2) mod 524287 = 218767
 S( 6) = ( 218767² - 2) mod 524287 = 510066
 S( 7) = ( 510066² - 2) mod 524287 = 386344
 S( 8) = ( 386344² - 2) mod 524287 = 323156
 S( 9) = ( 323156² - 2) mod 524287 = 218526
 S(10) = ( 218526² - 2) mod 524287 = 504140
 S(11) = ( 504140² - 2) mod 524287 = 103469
 S(12) = ( 103469² - 2) mod 524287 = 417706
 S(13) = ( 417706² - 2) mod 524287 = 307417
 S(14) = ( 307417² - 2) mod 524287 = 382989
 S(15) = ( 382989² - 2) mod 524287 = 275842
 S(16) = ( 275842² - 2) mod 524287 =  85226
 S(17) = (  85226² - 2) mod 524287 = 523263
 S(18) = ( 523263² - 2) mod 524287 =      0

Da S(18) = 0 ist, ist M19 = 524287 eine Primzahl (dies ist schon seit 1603 bekannt).

Beispielimplementierung in Python

Im folgenden wird der Lucas-Lehmer-Test in Python implementiert. Der Vorteil der Programmiersprache Python ist hier, dass es mit beliebig großen ganzen Zahlen rechnen kann – Grenzen setzt lediglich der verfügbare Speicher. Die hier vorgestellte Implementierung berücksichtigt nicht, dass der Lucas-Lehmer-Test idealerweise bereits abbricht, wenn p gerade oder nicht-prim ist, dies wird dem Nutzer überlassen. So würde das Programm bei Eingabe von p = 2 die falsche Aussage liefern, dass die Zahl 3 keine Mersenne-Primzahl ist.

Auf einem Intel Pentium 4 aus dem Jahr 2005 benötigt die Rechnung für p = 11213 mit diesem Programm nur 41 Sekunden. Die Rechnung im Jahr 1963, mit der nachgewiesen wurde, dass M11213 prim ist, dauerte dagegen mit einem damaligen Supercomputer Illiac II (siehe en:ILLIAC II) noch 2¼ Stunden.[2]

#Lucas-Lehmer-Test fuer Python 2.6/2.7
print 'Lucas-Lehmer-Test (Mersenne-Zahlen)'
p = int(raw_input ('Exponent p  von 2^p-1 '))
m=2**p-1
print 'm = 2 ^',p,'- 1 =',m
s=4
for i in range (2,p):
    s=(s*s-2)%m
print 'ist',
if not s==0:
    print 'keine',
print 'Mersenne-Primzahl'

Literatur

Einzelnachweise

  1. Zum Beweis siehe Ribenboim: Die Welt der Primzahlen, S. 78/79.
  2. siehe Donald B. Gillies: Three new Mersenne primes and a statistical theory

Wikimedia Foundation.

Игры ⚽ Нужно решить контрольную?

Schlagen Sie auch in anderen Wörterbüchern nach:

  • Lucas-Lehmer Test — Eine Mersenne Zahl ist eine Zahl der Form 2n − 1. Im Speziellen bezeichnet man mit Mn = 2n − 1 die n te Mersenne Zahl. Die Primzahlen unter den Mersenne Zahlen werden Mersenne Primzahlen genannt. Die ersten acht Mersenne Primzahlen Mp sind 3, 7,… …   Deutsch Wikipedia

  • Lucas–Lehmer test — This article is about the generalized Lucas–Lehmer test for primality. There is also a Lucas–Lehmer test that only applies to Mersenne numbers; see Lucas–Lehmer test for Mersenne numbers. In computational number theory, the Lucas–Lehmer test is a …   Wikipedia

  • Lucas–Lehmer test for Mersenne numbers — This article is about the Lucas–Lehmer test (LLT), that only applies to Mersenne numbers. There is also a Lucas Lehmer Riesel test for numbers of the form N=k 2^n 1, with 2^n > k, based on the LLT: see Lucas Lehmer Riesel test. There is also a… …   Wikipedia

  • Test de Lucas-Lehmer — En matemáticas, la prueba de Lucas Lehmer es una prueba que sirve para determinar si un determinado número de Mersenne Mp es primo. El test fue desarrollado por Edouard Lucas en 1878 y subsecuentemente mejorado por Derrick Henry Lehmer en la… …   Wikipedia Español

  • Lucas-Lehmer-Riesel test — The Lucas Lehmer Riesel test is a primality test for numbers of the form N=k 2^n 1, with 2^n > k. The test was developed by Hans Riesel and it is based on the Lucas–Lehmer test for Mersenne numbers.The algorithmThe algorithm is very similar to… …   Wikipedia

  • Test de primalite de Lucas-Lehmer pour les nombres de Mersenne — Test de primalité de Lucas Lehmer pour les nombres de Mersenne En mathématiques, le test de Lucas Lehmer est un test de primalité pour les nombres de Mersenne. Le test fut originellement développé par Édouard Lucas en 1878 et amélioré de façon… …   Wikipédia en Français

  • Test de primalité de lucas-lehmer pour les nombres de mersenne — En mathématiques, le test de Lucas Lehmer est un test de primalité pour les nombres de Mersenne. Le test fut originellement développé par Édouard Lucas en 1878 et amélioré de façon notable par Derrick Henry Lehmer dans les années 1930. Le test Le …   Wikipédia en Français

  • Test de primalite de Lucas-Lehmer — Test de primalité de Lucas Lehmer Le test de primalité de Lucas Lehmer est une méthode pour tester la primalité de certains nombres n ; il requiert que les facteurs premiers de n 1 soient connus. S il existe un a inférieur à n et plus grand… …   Wikipédia en Français

  • Test de primalité de lucas-lehmer — Le test de primalité de Lucas Lehmer est une méthode pour tester la primalité de certains nombres n ; il requiert que les facteurs premiers de n 1 soient connus. S il existe un a inférieur à n et plus grand que 1 tel que et, pour tous les… …   Wikipédia en Français

  • Test de primalité de Lucas-Lehmer pour les nombres de Mersenne — Pour les articles homonymes, voir Lucas et Lehmer. En mathématiques, le test de Lucas Lehmer est un test de primalité pour les nombres de Mersenne. Le test fut originellement développé par Édouard Lucas en 1878 et amélioré de façon notable par… …   Wikipédia en Français

Share the article and excerpts

Direct link
Do a right-click on the link above
and select “Copy Link”