Start · Sprachen · PHP · Referenz · gmp_mod

gmp_mod

Funktion

Berechnet den nicht-negativen Rest der Division von <code>num1</code> durch <code>num2</code> (Modulo-Operation mit GMP-Ganzzahlen).

seit PHP 4.0.4 Kategorie: math

Signatur

gmp_mod(GMP|int|string $num1, GMP|int|string $num2): GMP

Beschreibung

gmp_mod führt eine Modulo-Operation auf beliebig großen Ganzzahlen aus, die als GMP-Ressource bzw. GMP-Objekt (ab PHP 5.6), nativer int oder numerischer string übergeben werden können. Das Ergebnis ist stets nicht-negativ und entspricht dem Rest der ganzzahligen Division num1 / num2.

Die Funktion ist besonders nützlich, wenn Zahlen verarbeitet werden müssen, die den Wertebereich von PHP-nativen int-Werten (64 Bit) überschreiten – z. B. bei kryptografischen Berechnungen, RSA-Schlüsselerzeugung oder der Prüfung sehr großer Primzahlen.

Im Gegensatz zum PHP-Operator % liefert gmp_mod immer ein nicht-negatives Ergebnis, solange num2 positiv ist. Bei negativem num2 wird eine Ausnahme bzw. ein Fehler ausgelöst.

Alle Parameter können wahlweise als GMP-Objekt (Rückgabewert von gmp_init), als PHP-int oder als Dezimalzahl in einem string übergeben werden, was flexible Nutzung ohne explizite Konvertierung ermöglicht.

Parameter

Name Typ Default Beschreibung
$num1 Pflicht GMP|int|string Der Dividend (Zähler) der Modulo-Operation. Kann ein GMP-Objekt, ein PHP-int oder ein numerischer string sein.
$num2 Pflicht GMP|int|string Der Divisor (Nenner/Modulus). Muss größer als 0 sein. Kann ein GMP-Objekt, ein PHP-int oder ein numerischer string sein.

Rückgabewert

Typ
GMP
Beschreibung
Gibt ein GMP-Objekt zurück, das den nicht-negativen Rest der Division num1 / num2 enthält. Mit gmp_strval oder durch implizite String-Konvertierung kann das Ergebnis als Dezimalzahl ausgegeben werden.

Beispiele

Einfache Modulo-Berechnung mit großen Zahlen

<?php
// Berechnung: 10^20 mod 7
$num1 = gmp_init('100000000000000000000'); // 10^20
$num2 = gmp_init(7);

$result = gmp_mod($num1, $num2);
echo gmp_strval($result); // Ausgabe: 2
2

Modulo-Exponentiation für kryptografische Zwecke (manuell)

<?php
// Beispiel: Prüfen, ob eine sehr große Zahl durch 13 teilbar ist
$big = gmp_init('987654321098765432109876543210');
$modulus = 13;

$remainder = gmp_mod($big, $modulus);
if (gmp_cmp($remainder, 0) === 0) {
    echo "Zahl ist durch 13 teilbar.";
} else {
    echo "Rest: " . gmp_strval($remainder);
}
Rest: 3

Direkte Übergabe als Integer und String

<?php
// num1 als String, num2 als int
$result = gmp_mod('1000000000000000001', 9);
echo gmp_strval($result);
1

// Wichtig · Fallstricke

Achtung: Wenn num2 gleich 0 ist, wird ein \DivisionByZeroError (PHP 8) bzw. ein Laufzeitfehler ausgelöst. Dieser Fall muss vor dem Aufruf abgefangen werden.

Das Ergebnis von gmp_mod ist immer nicht-negativ, sofern num2 positiv ist – dies unterscheidet sich vom Verhalten des %-Operators bei negativen Dividenden (-7 % 3 ergibt in PHP -1, während gmp_mod stets einen nicht-negativen Rest liefert).

Die GMP-Erweiterung muss beim Kompilieren von PHP aktiviert sein (--with-gmp). Auf vielen Systemen ist sie als Paket verfügbar (php-gmp).