Duplicar posibles:
The most efficient way to implement an integer based power function pow(int, int)potencias de cálculo (por ejemplo, 2^11) de forma rápida
¿Cómo puedo calcular potencias con un mejor tiempo de ejecución?
E.g. 2^13.
recuerdo haber visto en alguna parte que tiene algo que ver con el siguiente cálculo:
2^13 = 2^8 * 2^4 * 2^1
Pero no puedo ver cómo calcular cada componente del lado derecho de la ecuación y luego multiplicarlos me ayudaría.
¿Alguna idea?
Editar: Quiero decir con cualquier base. ¿De qué manera los algoritmos que mencionó a continuación, en particular la "Exponentación por cuadratura", mejoran el tiempo de ejecución/complejidad?
duplicado: http: // stackoverflow.com/questions/101439/the-most-efficient-way-to-implementation-an-integer-based-power-function-powint-int –
"Exponentación por cuadratura" calcula 'base^exp' en' log (exp) ' pasos, donde * log * es el logaritmo con base 2. –
@Nick D, sé que afirmo eso en mi respuesta, pero me he dado cuenta de que estoy un poco equivocado. Es básicamente correcto si usa números enteros estándar. Pero una vez que llegas al uso de bignums se convierte básicamente en 'O (log (n)^2)' porque las multiplicaciones toman más que O (1) vez. – Omnifarious