Eine indische Legende erzählt die Geschichte des angeblichen Erfinders des Schachspiels, der den Kaiser von Indien mit seinem Spiel so sehr beeindruckte, dass er mit allem belohnt wurde, was gefragt wurde.
Der Mann sagte, er wolle mit Reis bezahlt werden. Er wollte ein Reiskorn für das erste Feld des Schachbretts, zwei für das zweite, vier für das dritte, acht für das vierte und so weiter bis zum 64. Feld.
Der Kaiser war erstaunt, dass der Mann um eine so kleine Belohnung bat, aber als seine Mathematiker zu zählen begannen, verlor er schließlich eine seiner Provinzen.
Aufgabe
Berechnen Sie anhand der Seitenlänge eines hypothetischen Schachbretts (8 auf einem Standardschachbrett) und des Multiplikators zwischen den Quadraten (2 in der Legende) die Anzahl der Reiskörner, die der Kaiser dem Mann zahlen muss.
Anmerkungen
Die Seitenlänge ist immer eine positive ganze Zahl. Der Multiplikator kann stattdessen eine beliebige rationale Zahl sein.
Wenn Ihre bevorzugte Sprache keine sehr großen Zahlen anzeigen kann, ist dies in Ordnung, solange Ihr Programm kleinere Eingaben korrekt verarbeiten kann.
Auch wenn Ihre bevorzugte Sprache größere Werte (mit Exponentialnotationen) rundet, ist es in Ordnung, wenn diese Werte ungefähr korrekt sind.
Testfälle
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
Bitte beachten Sie die explizite Formel
result = (multiplier ^ (side ^ 2) - 1) / (multiplier - 1)
Führt falsch auf multiplier = 1
, als
1 ^ (side ^ 2) - 1 = 0
1 - 1 = 0
0 / 0 != side ^ 2 (as it should be)
Wertung
Das ist Code-Golf. Kürzeste Antwort in Bytes gewinnt.
If your language of choose can't display too large numbers, it's ok as long as your program can correctly process smaller inputs
Vorsicht, das hat in der Vergangenheit zu Problemen geführt. meta.codegolf.stackexchange.com/a/8245/31716