Dados dois números n e m, avalie a torre de poder infinita:
n ^ (n + 1) ^ (n + 2) ^ (n + 3) ^ (n + 4) ^ ... mod m
Lembre-se de que ^ é associativo correto. Então 2 ^ 3 ^ 4 = 2 ^ (3 ^ 4). Agora, como você pode atribuir um valor a uma sequência infinita de operadores associativos à direita?
Defina f (n, m, i) como a torre de força que contém os primeiros termos i da torre de força infinita. Então existe uma constante C tal que, para todo i> C, f (n, m, i) = f (n, m, C). Então, você poderia dizer que a torre de energia infinita converge para um determinado valor. Estamos interessados nesse valor.
Seu programa deve poder calcular n = 2017, m = 10 ^ 10 em menos de 10 segundos em um PC moderno razoável. Ou seja, você deve implementar um algoritmo real, sem força bruta.
Você pode assumir que n <2 30 e m <2 50 para os limites numéricos em sua linguagem de programação, mas seu algoritmo deve teoricamente funcionar para qualquer tamanho n , m . No entanto, seu programa deve estar correto para entradas dentro desses limites de tamanho, excedentes de valores intermediários não serão desculpados se as entradas estiverem dentro desses limites.
Exemplos:
2, 10^15
566088170340352
4, 3^20
4
32, 524287
16
n
e nãom
é garantido que sejam co-prime.