Indyjska legenda opowiada historię domniemanego wynalazcy szachów, który zaimponował cesarzowi Indii swoją grą tak bardzo, że otrzymał nagrodę za wszystko, o co poprosił.
Mężczyzna powiedział, że chce dostać ryż. Chciał ziarna ryżu na pierwszy kwadrat szachownicy, dwa na drugi, cztery na trzeci, osiem na czwarty i tak dalej, aż do 64. kwadratu.
Cesarz był zdumiony, że mężczyzna poprosił o tak małą nagrodę, ale kiedy jego matematycy zaczęli liczyć, ostatecznie stracił jedną ze swoich prowincji.
Zadanie
Biorąc pod uwagę długość boku hipotetycznej szachownicy (która wynosi 8 na domyślnej szachownicy) oraz mnożnik między kwadratami (który w legendzie wynosi 2), obliczyć liczbę ziaren ryżu, które cesarz musi zapłacić człowiekowi.
Notatki
Długość boku zawsze będzie dodatnią liczbą całkowitą. Mnożnik może być dowolną liczbą wymierną.
Jeśli wybrany język nie może wyświetlać bardzo dużych liczb, jest w porządku, o ile Twój program może poprawnie przetwarzać mniejsze dane.
Również jeśli wybrany język zaokrągla większe wartości (z notacjami wykładniczymi), nie ma problemu, jeśli te wartości są w przybliżeniu poprawne.
Przypadki testowe
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
Uwaga: wyraźna formuła
result = (multiplier ^ (side ^ 2) - 1) / (multiplier - 1)
Wykonuje się źle multiplier = 1
, jak
1 ^ (side ^ 2) - 1 = 0
1 - 1 = 0
0 / 0 != side ^ 2 (as it should be)
Punktacja
To jest golf golfowy. Najkrótsza odpowiedź w bajtach wygrywa.
If your language of choose can't display too large numbers, it's ok as long as your program can correctly process smaller inputs
Ostrożnie, to spowodowało problemy w przeszłości. meta.codegolf.stackexchange.com/a/8245/31716