Aktueller Standort: Startseite> Neueste Artikel> PHP kombiniert mit GMP zur Implementierung eines Lucas-Lehmer-Primzahltest-Tutorials für große Ganzzahlen

PHP kombiniert mit GMP zur Implementierung eines Lucas-Lehmer-Primzahltest-Tutorials für große Ganzzahlen

M66 2025-10-09

Einführung

In der Zahlentheorie ist der Lucas-Lehmer-Primzahltest eine effiziente Methode zur Bestimmung, ob eine Mersenne-Zahl eine Primzahl ist. In diesem Artikel kombinieren wir die PHP-Sprache und die GMP-Erweiterung (GNU Multiple Precision Arithmetic Library, GNU Multiple Precision Math Library), um den Lucas-Lehmer-Primalitätstest zu implementieren und ein vollständiges Codebeispiel bereitzustellen.

Was ist der Lucas-Lehmer-Primordtest?

Der Lucas-Lehmer-Primalitätstest ist ein Algorithmus, der speziell entwickelt wurde, um zu erkennen, ob eine Mersenne-Zahl der Form M = 2^n - 1 eine Primzahl ist, wobei n eine positive ganze Zahl größer als 1 ist. Der Test basiert auf der Lucas-Lehmer-Folge. Es berechnet iterativ jedes Element der Folge und bestimmt schließlich, ob das letzte Element der Folge Null ist, wodurch die Primalität der Mersenne-Zahl bestimmt wird.

Lucas-Lehmer-Tests mit PHP und GMP

Installieren Sie die GMP-Erweiterung

Die integrierten Funktionen von PHP können keine sehr großen Ganzzahloperationen verarbeiten, daher ist die GMP-Erweiterung erforderlich. Bei der Installation von PHP können Sie eine Version mit aktivierten GMP-Erweiterungen auswählen oder GMP-Erweiterungen in Ihrer vorhandenen Umgebung aktivieren.

Schreiben einer Lucas-Lehmer-Primalitätstestfunktion

 Funktion lucasLehmerTest($n)
{
    $s = '4';
    $m = gmp_pow('2', $n) - '1';

    for ($i = 1; $i < $n - 1; $i++) {
        $s = gmp_mod(gmp_pow($s, 2) - 2, $m);
    }

    if ($s == &#39;0&#39;) {
        return true;
    }

    return false;
}

Analyse:

  • $n: Der Exponententeil der Mersenne-Zahl.
  • $s: Anfangswert der Lucas-Lehmer-Folge.
  • $m: Mersenne-Zahl.

In der Funktion wird gmp_pow verwendet, um 2 hoch $n$ minus 1 zu berechnen, um $m$ zu erhalten, dann $n-1$-mal zu iterieren, um die Lucas-Lehmer-Folge zu berechnen, und schließlich zu bestimmen, ob das letzte Element der Folge Null ist, um die Primalität zu bestimmen.

Rufen Sie die Lucas-Lehmer-Primzahltestfunktion auf

 $exponenten = [2, 3, 5, 7, 13, 17];

foreach ($exponents als $exponent) {
    $result = lucasLehmerTest($exponent);

    if ($result) {
        echo "2^$exponent - 1 ist eine Primzahl.";
    } anders {
        echo "2^$exponent - 1 ist keine Primzahl.";
    }
}

Analyse:

Wir definieren ein Array $exponents, das mehrere Exponentenwerte enthält, und rufen dann mithilfe einer foreach-Schleife die Lucas-Lehmer-Primalitätstestfunktion auf, um Beurteilungsinformationen basierend auf den Testergebnissen auszugeben.

Zusammenfassen

Durch PHP- und GMP-Erweiterungen können Sie den Lucas-Lehmer-Primzahltest einfach implementieren und bestimmen, ob eine große ganze Zahl eine Primzahl ist. Für die Primzahlbeurteilung großer Mersenne-Zahlen ist der Lucas-Lehmer-Algorithmus effizienter und kann schneller Ergebnisse liefern. Die in diesem Artikel bereitgestellten Codebeispiele können als praktische Referenz verwendet werden.

Referenzen

  • Lucas-Lehmer-Primzahltest. Wikipedia, die freie Enzyklopädie. URL: https://en.wikipedia.org/wiki/Lucas%E2%80%93Lehmer_primality_test
  • GMP-Handbuch. PHP. URL: https://www.php.net/manual/en/book.gmp.php