Signatur
Beschreibung
Die Funktion gmp_kronecker() berechnet das Kronecker-Symbol (a | n) für zwei beliebige ganze Zahlen. Das Kronecker-Symbol ist eine Erweiterung des Jacobi-Symbols (und damit des Legendre-Symbols) auf alle ganzen Zahlen, also auch auf gerade Zahlen oder negative Werte als unteren Parameter.
Das Ergebnis ist immer -1, 0 oder 1. In der Zahlentheorie wird es häufig in der Theorie der quadratischen Formen und in der analytischen Zahlentheorie verwendet. Wenn num2 eine ungerade Primzahl ist, stimmt der Rückgabewert mit dem Legendre-Symbol überein: 1 bedeutet, dass num1 ein quadratischer Rest modulo num2 ist, -1 dass es kein quadratischer Rest ist, und 0 dass num1 durch num2 teilbar ist.
Die Funktion akzeptiert als Parameter sowohl native PHP-Integer und Strings als auch GMP-Objekte, was die Verarbeitung sehr großer Zahlen ermöglicht, die den Integer-Bereich von PHP überschreiten würden. Sie setzt die GMP-Erweiterung voraus.
Typische Einsatzgebiete sind kryptographische Algorithmen, primzahltheoretische Berechnungen sowie die Implementierung von Algorithmen zur Prüfung quadratischer Reste in der Zahlentheorie.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $num1 Pflicht | GMP|int|string | Der Zähler (oberer Parameter) des Kronecker-Symbols. Kann ein GMP-Objekt, ein PHP-Integer oder eine numerische Zeichenkette sein. |
|
| $num2 Pflicht | GMP|int|string | Der Nenner (unterer Parameter) des Kronecker-Symbols. Kann ein GMP-Objekt, ein PHP-Integer oder eine numerische Zeichenkette sein. Im Gegensatz zum Jacobi-Symbol darf dieser Wert auch gerade oder negativ sein. |
Rückgabewert
-1, 0 oder 1 zurück, entsprechend dem berechneten Kronecker-Symbol (num1 | num2).Beispiele
Grundlegende Verwendung mit einer ungeraden Primzahl
<?php
// Legendre-Symbol (a | p) für p = 7 (ungerade Primzahl)
// Quadratische Reste mod 7: 1, 2, 4
$p = 7;
for ($a = 0; $a <= 7; $a++) {
$result = gmp_kronecker($a, $p);
echo "({$a} | {$p}) = {$result}\n";
}
Kronecker-Symbol mit gerader Zahl als Nenner
<?php
// Erweiterung über das Jacobi-Symbol hinaus: gerader Nenner erlaubt
$values = [1, 3, 5, 7, 9];
foreach ($values as $a) {
$result = gmp_kronecker($a, 8);
echo "({$a} | 8) = {$result}\n";
}
Verwendung mit GMP-Objekten für große Zahlen
<?php
// Sehr große Zahlen mit GMP-Objekten
$a = gmp_init('123456789012345678901234567890');
$n = gmp_init('98765432109876543210');
$result = gmp_kronecker($a, $n);
echo "Kronecker-Symbol: {$result}\n";
// Wichtig · Fallstricke
Die Funktion setzt die GMP-Erweiterung (ext/gmp) voraus, die in PHP standardmäßig nicht immer aktiviert ist. Vor der Verwendung sollte mit extension_loaded('gmp') geprüft werden, ob die Erweiterung verfügbar ist.
Das Kronecker-Symbol ist eine rein zahlentheoretische Funktion ohne direkten Sicherheitsbezug. Dennoch ist zu beachten, dass bei der Verwendung als Teil kryptographischer Algorithmen (z. B. Primzahltests wie Solovay–Strassen) die Korrektheit der Eingaben sichergestellt werden muss.
Achtung: Strings als Zahlen-Argumente werden als Dezimalzahlen interpretiert. Hexadezimale Strings (z. B. '0xFF') werden nicht automatisch konvertiert — stattdessen sollte gmp_init('0xFF', 16) verwendet werden.