Start · Sprachen · PHP · Referenz · gmp_nextprime

gmp_nextprime

Funktion

Gibt die nächste Primzahl zurück, die größer als <code>num</code> ist.

seit PHP 5.2.0 Kategorie: math

Signatur

gmp_nextprime(GMP|int|string $num): GMP

Beschreibung

gmp_nextprime() berechnet die kleinste Primzahl, die strikt größer als der übergebene Wert num ist. Die Funktion verwendet intern probabilistische Primzahltests (Miller-Rabin), die für praktische Zwecke hinreichend zuverlässig sind.

Die Funktion ist besonders nützlich in der Kryptographie, z. B. beim Erzeugen großer Primzahlen für RSA-Schlüsselgenerierung oder Diffie-Hellman-Parameter. Da sie mit der GMP-Erweiterung (GNU Multiple Precision) arbeitet, können beliebig große ganze Zahlen verarbeitet werden, die weit über den Bereich nativer PHP-Integer hinausgehen.

Als Eingabe akzeptiert gmp_nextprime() ein GMP-Objekt, eine ganze Zahl oder einen numerischen String. Das Ergebnis ist stets ein GMP-Objekt, das mit anderen GMP-Funktionen weiterverarbeitet werden kann.

Zu beachten ist, dass die Funktion bei sehr großen Zahlen deutlich mehr Rechenzeit benötigt, da das Intervall zwischen aufeinanderfolgenden Primzahlen mit der Größe der Zahl zunimmt.

Parameter

Name Typ Default Beschreibung
$num Pflicht GMP|int|string Die Ausgangszahl, ab der die nächste Primzahl gesucht wird. Kann ein GMP-Objekt, eine PHP-Ganzzahl oder ein numerischer String sein.

Rückgabewert

Typ
GMP
Beschreibung
Gibt ein GMP-Objekt zurück, das die nächste Primzahl darstellt, die strikt größer als num ist.

Beispiele

Nächste Primzahl nach einer kleinen Zahl finden

<?php
$zahl = 10;
$naechste = gmp_nextprime($zahl);
echo gmp_strval($naechste); // 11

$zahl2 = 11;
$naechste2 = gmp_nextprime($zahl2);
echo PHP_EOL . gmp_strval($naechste2); // 13
11 13

Große Primzahl für kryptographische Zwecke generieren

<?php
// Startpunkt: eine große Zahl (z. B. 512-Bit-Bereich)
$start = gmp_pow(2, 512);
$primzahl = gmp_nextprime($start);
echo "Nächste Primzahl nach 2^512:" . PHP_EOL;
echo gmp_strval($primzahl) . PHP_EOL;

// Überprüfung mit gmp_prob_prime
$sicherheit = gmp_prob_prime($primzahl);
echo "Wahrscheinlich prim (2=definitiv, 1=wahrscheinlich): " . $sicherheit;
Nächste Primzahl nach 2^512: 13407807929942597099574024998205846127479365820592393377723561443721764030073546976801874298166903427690031858186486050853753882811946569946433649006084171 Wahrscheinlich prim (2=definitiv, 1=wahrscheinlich): 1

Primzahlen in einem Bereich aufzählen

<?php
$aktuell = gmp_init(0);
echo "Erste 10 Primzahlen:" . PHP_EOL;
for ($i = 0; $i < 10; $i++) {
    $aktuell = gmp_nextprime($aktuell);
    echo gmp_strval($aktuell) . " ";
}
Erste 10 Primzahlen: 2 3 5 7 11 13 17 19 23 29

// Wichtig · Fallstricke

Probabilistischer Test: Die intern verwendeten Primzahltests sind probabilistisch. Bei sehr großen Zahlen besteht eine theoretisch sehr geringe Restwahrscheinlichkeit, dass eine zusammengesetzte Zahl als prim klassifiziert wird. Für sicherheitskritische Anwendungen sollte das Ergebnis zusätzlich mit gmp_prob_prime() mit einem hohen Wiederholungsparameter validiert werden.

Performance: Bei sehr großen Zahlen (z. B. > 1024 Bit) kann die Berechnung erhebliche Zeit in Anspruch nehmen, da der Abstand zwischen aufeinanderfolgenden Primzahlen wächst. Für zeitkritische Anwendungen sollte ein Timeout-Mechanismus eingebaut werden.

Voraussetzung: Die GMP-Erweiterung muss aktiviert sein (extension=gmp in der php.ini). Unter PHP 7.2+ ist GMP standardmäßig in vielen Distributionen verfügbar.