Một truyền thuyết Ấn Độ kể câu chuyện về người được cho là nhà phát minh của trò chơi cờ vua, người đã gây ấn tượng với hoàng đế Ấn Độ với trò chơi của mình đến mức anh ta sẽ nhận được bất cứ điều gì được hỏi.
Người đàn ông nói rằng anh ta muốn được trả tiền bằng gạo. Ông muốn có một hạt gạo cho hình vuông đầu tiên của bàn cờ, hai cho cái thứ hai, bốn cho cái thứ ba, tám cho cái thứ tư, và cứ thế, cho đến cái vuông thứ 64.
Hoàng đế đã rất ngạc nhiên khi người đàn ông yêu cầu một phần thưởng nhỏ như vậy, nhưng khi các nhà toán học của ông bắt đầu đếm, cuối cùng ông đã mất một trong những tỉnh của mình.
Bài tập, nhiệm vụ
Với chiều dài cạnh của bàn cờ giả định (là 8 trên bàn cờ mặc định) và hệ số nhân giữa các ô vuông (là 2 trong truyền thuyết), hãy tính số hạt gạo mà hoàng đế phải trả cho người đàn ông.
Ghi chú
Độ dài cạnh sẽ luôn là một số nguyên dương. Số nhân thay vào đó có thể là bất kỳ loại số hữu tỷ nào.
Nếu ngôn ngữ bạn chọn không thể hiển thị số lượng lớn, thì miễn là chương trình của bạn có thể xử lý chính xác các đầu vào nhỏ hơn.
Ngoài ra, nếu ngôn ngữ bạn chọn làm tròn các giá trị lớn hơn (với các ký hiệu theo cấp số nhân), sẽ ổn nếu các giá trị đó gần đúng.
Tủ thử
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
Xin lưu ý rằng công thức rõ ràng
result = (multiplier ^ (side ^ 2) - 1) / (multiplier - 1)
Thực hiện sai trên multiplier = 1
, như
1 ^ (side ^ 2) - 1 = 0
1 - 1 = 0
0 / 0 != side ^ 2 (as it should be)
Chấm điểm
Đây là mã golf. Câu trả lời ngắn nhất trong byte thắng.
If your language of choose can't display too large numbers, it's ok as long as your program can correctly process smaller inputs
Cẩn thận, điều đó đã gây ra vấn đề trong quá khứ. meta.codegolf.stackexchange.com/a/8245/31716