Su tarea es calcular lentamente la exponenciación, con los siguientes pasos:
Dadas dos entradas (en este ejemplo, 4 y 8), debe calcular la exponenciación calculando la ecuación bit a bit. Lo haría 4^8
, tendría un mayor valor base (4) y un exponente más pequeño (8). Puedes hacer esto usando más exponenciación y división. Puede dividir el exponente por un valor X (siempre que X sea un divisor primo del exponente) y convertir el valor base ( B ) en B^X
. Por ejemplo, puedes hacer:
4^8 = (4 ^ 2)^(8 / 2) = 16^4
He reemplazado X con 2 en la ecuación anterior.
Puede 'simplificar' 16^4
aún más, nuevamente con X = 2
:
16^4 = (16 ^ 2)^(4 / 2) = 256^2
Y luego finalmente calcular un número (de nuevo X = 2
):
256^2 = (256 ^ 2)^(2 / 2) = 65536^1 = 65536
Por lo tanto,
4^8 = 16^4 = 256^2 = 65536
Este es el resultado que debes dar. El separador de salida es un poco flexible, por ejemplo, puede separar las ecuaciones por líneas nuevas o espacios en lugar de =
. O bien, puede ponerlos en una lista (pero no debe usar un dígito o el ^
carácter como separador).
Como señaló Martin Ender, ^
también es flexible. Por ejemplo, puede usar [A, B]
o en A**B
lugar de A^B
en la salida.
X solo puede ser primo, lo que significa que no puede usar X = 8
para llegar directamente a la solución, y los valores de X solo serán factores primos de la segunda entrada (el exponente).
Ejemplos:
(input) -> (output)
4^8 -> 4^8=16^4=256^2=65536
5^11 -> 5^11=48828125
2^15 -> 2^15=32^3=32768 (2^15=8^5=32768 is also a valid output)
Tenga en cuenta que el formato de entrada también es flexible (por ejemplo, puede tomar A \n B
o A B
no A^B
. Obviamente, esto no sería un problema si escribe una función tomando dos argumentos.
En el segundo ejemplo, vamos directamente al cálculo, ya que 11
es primo y no podemos seguir más pasos.
Puede escribir un programa o una función para resolver esto, y puede imprimir o devolver el valor, respectivamente.
Como este es el código de golf , ¡el código más corto gana!
x^1
?
32^3
y8^15
tampoco son 512.