Учитывая два числа 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
которые не гарантированы совместно премьера.