喵喵喵~
众所周知: $a^b \equiv\begin{cases}a^b & b<\varphi(m)\a^{b\bmod \varphi(m)+\varphi(m) } & b\ge\varphi(m)\end{cases}\pmod m$。
同时,当 $n>2$ 时,有 $2\mid\varphi(n)$ 以及 $\varphi(2kn)=2\varphi(n)\le\dfrac{\varphi(n)}2(2\nmid n)$。所以易得对 $n$ 求 $\log$ 次 $\varphi$ 后其值固定为 1。
所以对于一个幂塔 $a_1{a_2{a_3{\cdots{a_n}}}}\bmod p$,可以考虑递归求 $a_2{a_3{\cdots^{a_n}}}\bmod\varphi(p)$,再据情况考虑是否加 $\varphi(p)$。容易发现,最多递归 $\log$ 次,这是一件很棒的事。
下面有 3 道例题。
CF906D Power Tower
[Ynoi2016] 炸脖龙 I
上帝与集合的正确用法
给定 $n$ 个数 $w_1,w_2,...,w_n$ 与模数 $m$。
给出 $q$ 组询问,每次询问给出 $l,r$,求 $w_l{w_{l+1}^{w_r}}} \mod m$ 的值。
考虑对于一次询问 $S(l,r,m)$ 规约到 $S(l+1,r,\varphi(m))$,做完了。
上帝与集合由于指数一直是 2 的无穷幂塔,所以一定会加上 $\varphi(m)$。另外两题注意在快速幂时打个标记记录是否取过模。