Mögliche Duplizieren:
The most efficient way to implement an integer based power function pow(int, int)Rechenleistungen (zum Beispiel 2^11) schnell
Wie kann ich berechnen Kräfte mit besserer Laufzeit?
z. 2^13.
Ich erinnere mich, irgendwo, dass es etwas mit der folgenden Berechnung zu tun hat:
2^13 = 2^8 * 2^4 * 2^1
Aber ich kann nicht sehen, wie die Berechnung jede Komponente der rechten Seite der Gleichung und dann multiplizieren sie würde mir helfen.
Irgendwelche Ideen?
Edit: Ich meinte mit jeder Basis. Wie verbessern die unten erwähnten Algorithmen, insbesondere die "Exponentierung durch Quadrieren", die Laufzeit/Komplexität?
duplizieren: http: // stackoverflow.com/questions/101439/the-most-effiziente-Weg-zu-implementieren-eine-Integer-basierte-Power-Funktion-powint-int –
"Exponentierung durch Quadrierung" berechnet "base^exp" in "log (exp)" Schritte, wo * log * ist der Logarithmus mit Base 2. –
@Nick D, ich weiß, dass ich in meiner Antwort, aber ich habe festgestellt, dass ich etwas falsch bin. Es ist grundsätzlich korrekt, wenn Sie Standard-Ganzzahlen verwenden. Aber sobald Sie Bignums verwenden, wird es im Grunde genommen "O (log (n)^2)", weil die Multiplikationen mehr als O (1) mal dauern. – Omnifarious