一位印度传奇人物讲述了所谓的国际象棋发明者的故事,他用他的棋子给印度皇帝留下了深刻的印象,以至于他得到的任何要求都会得到回报。
该男子说他想用大米付钱。他想在棋盘的第一个正方形上放一粒米,第二个想要两个,第三个四个,第四个八个,依此类推,直到第64个正方形。
皇帝惊讶于这个人要求这么小的报酬,但是随着他的数学家开始数数,他最终失去了他的一个省。
任务
给定假设的棋盘的边长(默认棋盘的边长为8)和正方形之间的乘数(图例中为2),计算皇帝必须付给该人的米粒数。
笔记
边长将始终为正整数。乘数可以改为任何有理数。
如果您选择的语言不能显示非常大的数字,则可以,只要您的程序可以正确处理较小的输入即可。
同样,如果您选择的语言舍入较大的值(带有指数符号),则这些值近似正确也是可以的。
测试用例
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