Uma lenda indiana conta a história do suposto inventor do jogo de xadrez, que impressionou tanto o imperador da Índia com seu jogo que ele seria recompensado com qualquer coisa que fosse solicitada.
O homem disse que queria ser pago em arroz. Ele queria um grão de arroz para o primeiro quadrado do tabuleiro de xadrez, dois para o segundo, quatro para o terceiro, oito para o quarto e assim por diante, até o 64º quadrado.
O imperador ficou surpreso que o homem pedisse uma recompensa tão pequena, mas quando seus matemáticos começaram a contar, ele acabou perdendo uma de suas províncias.
Tarefa
Dado o comprimento do lado de um tabuleiro de xadrez hipotético (que é 8 em um tabuleiro de xadrez padrão) e o multiplicador entre quadrados (que é 2 na legenda), calcule o número de grãos de arroz que o imperador deve pagar ao homem.
Notas
O comprimento do lado sempre será um número inteiro positivo. O multiplicador poderia ser qualquer tipo de número racional.
Se o seu idioma de escolha não puder exibir números muito grandes, tudo bem, desde que o seu programa possa processar corretamente entradas menores.
Além disso, se o seu idioma de escolha arredondar valores maiores (com notações exponenciais), tudo bem se esses valores estiverem aproximadamente corretos.
Casos de teste
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
Observe que a fórmula explícita
result = (multiplier ^ (side ^ 2) - 1) / (multiplier - 1)
Executa errado multiplier = 1
, como
1 ^ (side ^ 2) - 1 = 0
1 - 1 = 0
0 / 0 != side ^ 2 (as it should be)
Pontuação
Isso é código-golfe. A resposta mais curta em bytes vence.
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, isso causou problemas no passado. meta.codegolf.stackexchange.com/a/8245/31716