Start · Sprachen · PHP · Referenz · gmp_kronecker

gmp_kronecker

Funktion

Berechnet das Kronecker-Symbol <code>(num1 | num2)</code>, eine Verallgemeinerung des Jacobi-Symbols auf beliebige ganze Zahlen.

seit PHP 7.3.0 Kategorie: math

Signatur

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

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

Typ
int
Beschreibung
Gibt -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";
}
(0 | 7) = 0 (1 | 7) = 1 (2 | 7) = 1 (3 | 7) = -1 (4 | 7) = 1 (5 | 7) = -1 (6 | 7) = -1 (7 | 7) = 0

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";
}
(1 | 8) = 1 (3 | 8) = -1 (5 | 8) = -1 (7 | 8) = 1 (9 | 8) = 1

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";
Kronecker-Symbol: 1

// 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.