Cho hai số n và m, đánh giá tháp năng lượng vô hạn:
n ^ (n + 1) ^ (n + 2) ^ (n + 3) ^ (n + 4) ^ ... mod m
Hãy nhớ rằng ^ là liên kết đúng. Vậy 2 ^ 3 ^ 4 = 2 ^ (3 ^ 4). Bây giờ làm thế nào bạn có thể gán một giá trị cho một chuỗi vô hạn các toán tử liên kết phải?
Xác định f (n, m, i) là tháp năng lượng chứa các điều khoản i đầu tiên của tháp năng lượng vô hạn. Sau đó, có một số hằng số C sao cho với mọi i> C, f (n, m, i) = f (n, m, C). Vì vậy, bạn có thể nói tháp năng lượng vô hạn hội tụ trên một giá trị nhất định. Chúng tôi quan tâm đến giá trị đó.
Chương trình của bạn phải có khả năng tính n = 2017, m = 10 ^ 10 trong dưới 10 giây trên PC hiện đại hợp lý. Đó là, bạn nên thực hiện một thuật toán thực tế, không có bruteforcing.
Bạn có thể giả sử rằng n <2 30 và m <2 50 cho các giới hạn số trong ngôn ngữ lập trình của bạn, nhưng về mặt lý thuyết, thuật toán của bạn phải hoạt động với mọi kích thước n , m . Tuy nhiên, chương trình của bạn phải chính xác cho các đầu vào trong các giới hạn kích thước này, tràn giá trị trung gian không được miễn trừ nếu các đầu vào nằm trong các giới hạn này.
Ví dụ:
2, 10^15
566088170340352
4, 3^20
4
32, 524287
16
n
vàm
đang không đảm bảo được đồng thủ.