Давши два числа n і m, оцініть нескінченну потужність вежі:
n ^ (n + 1) ^ (n + 2) ^ (n + 3) ^ (n + 4) ^ ... mod m
Майте на увазі, що ^ право-асоціативний. Отже 2 ^ 3 ^ 4 = 2 ^ (3 ^ 4). Тепер, як ви, можливо, можете призначити значення нескінченній послідовності право-асоціативних операторів?
Визначте f (n, m, i) як енергетичну вежу, що містить перші i члени нескінченної енергетичної вежі. Тоді існує деяка константа C така, що для кожного i> C, f (n, m, i) = f (n, m, C). Тож можна сказати, що нескінченна башта потужності сходить на певне значення. Нас цікавить ця цінність.
Ваша програма повинна мати можливість обчислити n = 2017, m = 10 ^ 10 за 10 секунд на розумному сучасному ПК. Тобто, ви повинні реалізувати власне алгоритм, а не грубої сили.
Ви можете припустити, що n <2 30 та m <2 50 для числових обмежень у вашій мові програмування, але ваш алгоритм повинен теоретично працювати для будь-якого розміру n , m . Однак ваша програма повинна бути правильною щодо введення даних у межах цих розмірів, проміжні значення переливів не виправдовуються, якщо входи знаходяться в цих межах.
Приклади:
2, 10^15
566088170340352
4, 3^20
4
32, 524287
16
n
іm
які НЕ гарантовані спільно прем'єра.