Start · Sprachen · PHP · Referenz · gmp_perfect_square

gmp_perfect_square

Funktion

Prüft, ob eine GMP-Zahl eine vollständige Quadratzahl ist (d. h. ob ihre ganzzahlige Quadratwurzel exakt ist).

seit PHP 4.0.4 Kategorie: math

Signatur

gmp_perfect_square(GMP|int|string $num): bool

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

Typ
bool
Beschreibung
Gibt 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";
}
0 ist Quadratzahl: Ja 1 ist Quadratzahl: Ja 2 ist Quadratzahl: Nein 4 ist Quadratzahl: Ja 9 ist Quadratzahl: Ja 15 ist Quadratzahl: Nein 16 ist Quadratzahl: Ja 25 ist Quadratzahl: Ja 26 ist Quadratzahl: Nein

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;
999999999999999998000000000000000001 ist eine perfekte Quadratzahl. 999999999999999998000000000000000002 ist Quadratzahl: Nein

Negative Zahl – stets false

<?php
$negativ = gmp_init(-9);
var_dump(gmp_perfect_square($negativ)); // bool(false)
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.