Una leyenda india cuenta la historia del supuesto inventor del juego de ajedrez, que impresionó tanto al emperador de la India con su juego que sería recompensado con todo lo que se le pidiera.
El hombre dijo que quería que le pagaran en arroz. Quería un grano de arroz para el primer cuadro del tablero de ajedrez, dos para el segundo, cuatro para el tercero, ocho para el cuarto, y así sucesivamente, hasta el cuadrado 64.
El emperador se sorprendió de que el hombre pidiera una recompensa tan pequeña, pero a medida que sus matemáticos comenzaron a contar, terminó perdiendo una de sus provincias.
Tarea
Dada la longitud del lado de un tablero de ajedrez hipotético (que es 8 en un tablero de ajedrez predeterminado) y el multiplicador entre cuadrados (que es 2 en la leyenda), calcule la cantidad de granos de arroz que el emperador debe pagar al hombre.
Notas
La longitud del lado siempre será un número entero positivo. El multiplicador podría ser cualquier tipo de número racional.
Si su idioma de elección no puede mostrar números muy grandes, está bien siempre que su programa pueda procesar correctamente entradas más pequeñas.
Además, si su idioma de elección redondea valores más grandes (con anotaciones exponenciales), está bien si esos valores son aproximadamente correctos.
Casos de prueba
Input (side length, multiplier) => Output
8, 2 => 18446744073709551615
3, 6 => 2015539
7, 1.5 => 850161998.2854
5, -3 => 211822152361
256, 1 => 65536
2, 2 => 15
2, -2 => -5
Tenga en cuenta que la fórmula explícita
result = (multiplier ^ (side ^ 2) - 1) / (multiplier - 1)
Realiza mal en multiplier = 1
, como
1 ^ (side ^ 2) - 1 = 0
1 - 1 = 0
0 / 0 != side ^ 2 (as it should be)
Tanteo
Este es el código de golf. La respuesta más corta en bytes gana.
If your language of choose can't display too large numbers, it's ok as long as your program can correctly process smaller inputs
Cuidado, eso ha causado problemas en el pasado. meta.codegolf.stackexchange.com/a/8245/31716