Индийская легенда рассказывает историю о предполагаемом изобретателе шахматной игры, который настолько впечатлил императора Индии своей игрой, что он получит вознаграждение за все, что попросит.
Человек сказал, что хочет, чтобы ему заплатили рисом. Он хотел рисовое зерно для первого квадрата шахматной доски, два для второго, четыре для третьего, восемь для четвертого и так далее до 64-го квадрата.
Император был поражен, что этот человек попросил такую маленькую награду, но когда его математики начали считать, он потерял одну из своих провинций.
задача
Учитывая длину стороны гипотетической шахматной доски (на шахматной доске по умолчанию 8) и множитель между квадратами (на легенде 2), подсчитайте количество рисовых зерен, которые император должен заплатить человеку.
Заметки
Длина стороны всегда будет положительным целым числом. Вместо этого множитель может быть любым рациональным числом.
Если выбранный вами язык не может отображать очень большие числа, это нормально, если ваша программа может правильно обрабатывать вводимые данные меньшего размера.
Кроме того, если ваш язык выбора округляет большие значения (с экспоненциальными обозначениями), то все в порядке, если эти значения приблизительно верны.
Testcases
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
Обратите внимание, что явная формула
result = (multiplier ^ (side ^ 2) - 1) / (multiplier - 1)
Выполняет неправильно multiplier = 1
, как
1 ^ (side ^ 2) - 1 = 0
1 - 1 = 0
0 / 0 != side ^ 2 (as it should be)
счет
Это код-гольф. Кратчайший ответ в байтах побеждает.
If your language of choose can't display too large numbers, it's ok as long as your program can correctly process smaller inputs
Осторожно, это вызывало проблемы в прошлом. meta.codegolf.stackexchange.com/a/8245/31716