Signatur
Beschreibung
gmp_perfect_power() testet, ob die übergebene Zahl eine perfekte Potenz ist. Eine Zahl gilt als perfekte Potenz, wenn sie als ab geschrieben werden kann, wobei a eine ganze Zahl und b >= 2 ist. Beispiele: 8 (= 2³), 25 (= 5²), 64 (= 2⁶ oder 4³ oder 8²).
Die Funktion arbeitet intern mit der GMP-Bibliothek (GNU Multiple Precision Arithmetic Library) und kann daher auch mit sehr großen Ganzzahlen umgehen, die den Bereich normaler PHP-Integer-Typen überschreiten.
Typische Anwendungsfälle sind mathematische Berechnungen, Kryptographie-Algorithmen, zahlentheoretische Anwendungen oder die Validierung von Eingabedaten, bei denen bestimmte Eigenschaften von Zahlen geprüft werden müssen.
Der Parameter kann als GMP-Objekt, als PHP-int oder als numerischer string übergeben werden, was den Einsatz flexibel gestaltet.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $num Pflicht | GMP|int|string | Die zu prüfende Zahl. Kann als GMP-Objekt, als PHP-int oder als numerischer string (auch für sehr große Zahlen) übergeben werden. |
Rückgabewert
true zurück, wenn num eine perfekte Potenz ist (d.h. a^b mit b >= 2), andernfalls false. Für 0 und 1 wird ebenfalls true zurückgegeben, da diese als triviale Potenzen gelten.Beispiele
Einfache Prüfung bekannter perfekter Potenzen
<?php
// Perfekte Quadratzahlen und Kubikzahlen prüfen
$zahlen = [4, 8, 9, 16, 25, 27, 32, 36, 64, 100, 7, 13, 50];
foreach ($zahlen as $zahl) {
$ergebnis = gmp_perfect_power($zahl) ? 'Ja' : 'Nein';
echo "$zahl ist eine perfekte Potenz: $ergebnis\n";
}
Sehr große Zahlen mit GMP-Objekten prüfen
<?php
// Sehr große perfekte Potenz: 2^100
$grosseZahl = gmp_pow(2, 100);
echo "2^100 ist eine perfekte Potenz: ";
echo gmp_perfect_power($grosseZahl) ? 'Ja' : 'Nein';
echo "\n";
// Als String übergeben (z. B. für Zahlen, die PHP-int überschreiten)
$alsString = gmp_strval($grosseZahl);
echo "2^100 als String geprüft: ";
echo gmp_perfect_power($alsString) ? 'Ja' : 'Nein';
echo "\n";
// Eine Zahl, die keine perfekte Potenz ist
$primzahl = gmp_init('999999999999999989'); // eine große Primzahl
echo "Große Primzahl ist perfekte Potenz: ";
echo gmp_perfect_power($primzahl) ? 'Ja' : 'Nein';
echo "\n";
// Wichtig · Fallstricke
Triviale Fälle: Die Zahlen 0 und 1 werden von GMP als perfekte Potenzen behandelt und liefern true. Ebenso gilt dies für -1 (da (-1)^n = -1 für ungerade n). Negative Zahlen können ebenfalls true zurückgeben, sofern sie als ungerade Potenz einer negativen Basis darstellbar sind (z.B. -8 = (-2)^3).
Verfügbarkeit: Die Funktion ist erst seit PHP 8.2.0 verfügbar. Bei älteren PHP-Versionen muss eine eigene Implementierung verwendet werden. Außerdem muss die PHP-GMP-Extension installiert und aktiviert sein (extension=gmp in der php.ini).
Leistung: Die Funktion nutzt intern optimierte GMP-Algorithmen und ist auch für sehr große Zahlen effizient. Bei umfangreichen Berechnungsschleifen sollte man dennoch auf die Gesamtperformance achten.