Start · Sprachen · PHP · Referenz · gmp_perfect_power

gmp_perfect_power

Funktion

Prüft, ob eine gegebene Zahl eine perfekte Potenz ist, d.h. ob sie als <code>a^b</code> mit ganzzahligen <code>a</code> und <code>b &gt;= 2</code> dargestellt werden kann.

seit PHP 8.2.0 Kategorie: math

Signatur

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

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

Typ
bool
Beschreibung
Gibt 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";
}
4 ist eine perfekte Potenz: Ja 8 ist eine perfekte Potenz: Ja 9 ist eine perfekte Potenz: Ja 16 ist eine perfekte Potenz: Ja 25 ist eine perfekte Potenz: Ja 27 ist eine perfekte Potenz: Ja 32 ist eine perfekte Potenz: Ja 36 ist eine perfekte Potenz: Ja 64 ist eine perfekte Potenz: Ja 100 ist eine perfekte Potenz: Ja 7 ist eine perfekte Potenz: Nein 13 ist eine perfekte Potenz: Nein 50 ist eine perfekte Potenz: Nein

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";
2^100 ist eine perfekte Potenz: Ja 2^100 als String geprüft: Ja Große Primzahl ist perfekte Potenz: Nein

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