求 $2^{2^{2….}} mod$ $p$的值 $(p≤10^7)$
tls题解
考虑欧拉定理, 当 $gcd(a,p)=1$ ,$a^{\phi(p)} ≡ 1 (mod \ p )$
由此得出一个结论:
当$ x ≥ \phi(p)$时
$$
a^x ≡ a^{x\ mod\ \phi(p) + \phi(p)} (mod \ p)
$$
令$f(p) = 2^{2^2…} \ mod \ p $, 则$f(1)=0。$
所以
$$
f(p)=2^{2^2.. \ mod \ \phi(p) + \phi(p)}(mod \ p)
$$
$$
\ =2^{f(\phi(p))+\phi(p)}(mod \ p)
$$
直接这样递推下去即可
最多只会递归 $\log$ 次, 每次计算欧拉函数的复杂度为 $\sqrt{p}$,总的复杂度为 $O(\sqrt{p} \log{p})$
如果有多组输入的话,应预处理
$\phi \ ….. (\phi(\phi(p)))$的值
1 |
|