给定两个数字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)。因此,您可以说无限大功率塔收敛于某个值。我们对此价值感兴趣。
您的程序必须能够在合理的现代PC上在不到10秒的时间内计算出n = 2017,m = 10 ^ 10。也就是说,您应该实现一个实际的算法,不要强行使用。
您可以假设您的编程语言中的数值限制为n <2 30和m <2 50,但是理论上您的算法必须适用于任何大小n,m。但是,对于这些大小限制内的输入,您的程序必须正确,如果输入在这些限制内,则不会原谅中间值溢出。
例子:
2, 10^15
566088170340352
4, 3^20
4
32, 524287
16
n
并且不能保证是m
互质的。