Signatur
Beschreibung
gmp_perfect_square() prüft, ob die übergebene Ganzzahl eine perfekte Quadratzahl ist – also ob es eine ganze Zahl k gibt, sodass k * k = num gilt. Beispiele für perfekte Quadratzahlen sind 0, 1, 4, 9, 16, 25 usw.
Die Funktion gehört zur GMP-Erweiterung (GNU Multiple Precision), die es erlaubt, mit beliebig großen ganzen Zahlen zu rechnen, die über den Wertebereich von PHP-Integer-Typen hinausgehen. Der Parameter kann als GMP-Objekt, als gewöhnlicher PHP-Integer oder als numerischer String übergeben werden.
Sinnvoll ist diese Funktion überall dort, wo man Eigenschaften großer Zahlen prüfen muss, z. B. in der Kryptographie, in Zahlentheorie-Anwendungen oder in algorithmischen Wettbewerben. Für kleine Zahlen ist sie zwar nutzbar, aber meist unnötig – ein einfaches sqrt() reicht dort aus.
Negative Zahlen sind in den reellen Zahlen keine Quadratzahlen; gmp_perfect_square() gibt für negative Eingaben stets false zurück.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $num Pflicht | GMP|int|string | Die zu prüfende Zahl als GMP-Objekt, PHP-Integer oder numerischer String. Negative Werte führen immer zu false. |
Rückgabewert
true zurück, wenn num eine perfekte Quadratzahl ist (also exakt eine ganzzahlige Quadratwurzel besitzt), andernfalls false. Für negative Zahlen ist der Rückgabewert stets false.Beispiele
Einfache Überprüfung kleiner Zahlen
<?php
$zahlen = [0, 1, 2, 4, 9, 15, 16, 25, 26];
foreach ($zahlen as $z) {
$ergebnis = gmp_perfect_square($z) ? 'Ja' : 'Nein';
echo "$z ist Quadratzahl: $ergebnis\n";
}
Prüfung sehr großer Zahlen mit GMP-Objekten
<?php
// 999999999999999999^2 = eine riesige, aber perfekte Quadratzahl
$basis = gmp_init('999999999999999999');
$quadrat = gmp_mul($basis, $basis);
if (gmp_perfect_square($quadrat)) {
echo gmp_strval($quadrat) . ' ist eine perfekte Quadratzahl.' . PHP_EOL;
} else {
echo 'Keine Quadratzahl.' . PHP_EOL;
}
// Eine leicht veränderte Zahl
$kein_quadrat = gmp_add($quadrat, 1);
echo gmp_strval($kein_quadrat) . ' ist Quadratzahl: ';
echo gmp_perfect_square($kein_quadrat) ? 'Ja' : 'Nein';
echo PHP_EOL;
Negative Zahl – stets false
<?php
$negativ = gmp_init(-9);
var_dump(gmp_perfect_square($negativ)); // bool(false)
// Wichtig · Fallstricke
Erweiterung erforderlich: Die GMP-Erweiterung muss in der PHP-Installation verfügbar sein (Kompilier-Option --with-gmp). Auf vielen Systemen ist sie standardmäßig vorhanden; überprüfen lässt sich das mit extension_loaded('gmp').
Negative Zahlen: In der Mathematik haben negative Zahlen keine reelle Quadratwurzel; gmp_perfect_square() gibt daher für alle negativen Eingaben false zurück – dies ist kein Fehler, sondern definiertes Verhalten.
Typ-Flexibilität: Seit PHP 5.6 können GMP-Funktionen direkt mit Integer- oder String-Literalen aufgerufen werden, ohne vorher gmp_init() aufrufen zu müssen.