Heim > Backend-Entwicklung > PHP-Tutorial > Wie man PHP und GMP verwendet, um Fermat-Primalitätstests für große Zahlen zu implementieren

Wie man PHP und GMP verwendet, um Fermat-Primalitätstests für große Zahlen zu implementieren

王林
Freigeben: 2023-07-31 16:54:01
Original
1341 Leute haben es durchsucht

So verwenden Sie PHP und GMP, um den Fermat-Primalitätstest für große Zahlen zu implementieren

Einführung:
Der Fermat-Primalitätstest ist eine einfache Methode, um festzustellen, ob eine Zahl eine Primzahl ist. Diese Methode basiert auf dem kleinen Satz von Fermat, der besagt, dass, wenn p eine Primzahl und a eine positive ganze Zahl kleiner als p ist, a^(p-1) ≡ 1 (mod p) ist. Mit diesem Satz können wir mithilfe eines zufällig ausgewählten a testen, ob eine Zahl eine Primzahl ist. In diesem Artikel werden wir PHP- und GMP-Bibliotheken verwenden, um Fermat-Primalitätstests für große Zahlen zu implementieren.

Installation und Einrichtung:
Stellen Sie zunächst sicher, dass auf Ihrem System PHP- und GMP-Bibliotheken installiert sind. Wenn Sie sie noch nicht installiert haben, können Sie sie installieren, indem Sie den folgenden Befehl in der Befehlszeile ausführen:

sudo apt-get install php
sudo apt-get install php-gmp
Nach dem Login kopieren

Als nächstes erstellen Sie eine Datei mit dem Namen „fermat_prime.php“ und öffnen Sie sie mit einem Texteditor.

Implementieren Sie die Fermat-Primalitätstestfunktion:
Fügen Sie den folgenden Code hinzu, um die Fermat-Primalitätstestfunktion zu implementieren:

<?php

function is_prime($n, $k)
{
    if ($n <= 1 || $n == 4) {
        return false;
    }
    if ($n <= 3) {
        return true;
    }
 
    while ($k > 0) {
        // 随机选择一个 [2, $n-2] 之间的整数
        $a = gmp_random_range(2, $n-2);
 
        // 使用 GMP 函数进行幂运算
        $res = gmp_powm($a, $n-1, $n);
 
        // 如果不满足费马小定理,则 n 不是素数
        if (gmp_cmp($res, 1) != 0) {
            return false;
        }
        $k--;
    }
 
    return true;
}
Nach dem Login kopieren

Parsen Sie den Code:

  • Die Funktion is_prime akzeptiert zwei Parameter, $n ist der Zahl, die getestet werden soll, $k ist die Anzahl der Tests
  • Die Funktion prüft zunächst, ob $n zwischen 1 und 4 liegt. Wenn ja, gibt sie „false“ zurück. Dies liegt daran, dass weder 1 noch 4 Primzahlen sind. is_prime接受两个参数,$n是待测试的数,$k是测试的次数
  • 函数首先检查$n是否在1和4之间,如果是,则返回false。这是因为1和4都不是素数。
  • 接下来,函数使用一个while循环来进行$k次的测试。在每次循环中,函数随机选择一个介于2和$n-2之间的正整数,并使用GMP函数gmp_powm进行幂运算。
  • 最后,函数比较计算出来的幂是否等于1,如果不相等,则返回false,说明该数不是素数。
  • 如果在$k次测试中都通过了费马小定理的验证,函数返回true,说明该数可能是一个素数。

测试代码:
在代码文件的末尾添加以下代码来测试is_primeAls nächstes verwendet die Funktion eine While-Schleife, um $k-Tests durchzuführen. In jeder Schleife wählt die Funktion zufällig eine positive ganze Zahl zwischen 2 und $n-2 aus und verwendet die GMP-Funktion gmp_powm zur Potenzierung.

Abschließend vergleicht die Funktion, ob die berechnete Potenz gleich 1 ist. Wenn nicht, gibt sie „false“ zurück, was darauf hinweist, dass die Zahl keine Primzahl ist.

Wenn die Überprüfung des Kleinen Satzes von Fermat in $k-Tests bestanden wird, gibt die Funktion „true“ zurück, was darauf hinweist, dass es sich bei der Zahl möglicherweise um eine Primzahl handelt.

Testen Sie den Code:

Fügen Sie den folgenden Code am Ende der Codedatei hinzu, um die Wirkung der Funktion is_prime zu testen:

// 测试1: 检测一个较小的素数
$n = gmp_init("17");
$k = 5;
$result = is_prime($n, $k);
echo $result ? "$n is probable prime
" : "$n is not prime
";
 
// 测试2: 检测一个较大的合数
$n = gmp_init("123456789123456789");
$k = 5;
$result = is_prime($n, $k);
echo $result ? "$n is probable prime
" : "$n is not prime
";
Nach dem Login kopieren

Speichern und schließen Sie die Datei.

Führen Sie den Code aus:

Führen Sie den folgenden Befehl in der Befehlszeile aus, um die Codedatei auszuführen:

php fermat_prime.php
Nach dem Login kopieren

Als nächstes sollten Sie die Ergebnisse der Programmausgabe in der Befehlszeile sehen können:🎜
17 is probable prime
123456789123456789 is not prime
Nach dem Login kopieren
🎜Fazit:🎜Dies Der Artikel erklärt, wie man PHP und die GMP-Bibliothek verwendet, um Fermat-Primalitätstests für große Zahlen zu implementieren. Mit diesem einfachen Test können wir feststellen, ob eine größere Zahl eine Primzahl ist. Mit dieser Methode können wir den kleinen Satz von Fermat besser verstehen und grundlegende Primzahltestfunktionen implementieren. 🎜

Das obige ist der detaillierte Inhalt vonWie man PHP und GMP verwendet, um Fermat-Primalitätstests für große Zahlen zu implementieren. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage