2023 NOI 春季测试 T2 – 幂次 简略题解

洛谷题库 P9118 [春季测试 2023] 幂次

我们有非常易于理解的暴力解法:直接对于 b=3,4b=3,4\cdots,求出所有可以当作底数的 aa,计算 aba^b 后放入数据结构/排序去重;特别处理 b=2b=2 的情况即可。在此不再赘述。

不过,我们注意到若有正整数 xx,满足 x>1,x=a0b0  (a0,b0N)x>1,x=a_0^{b_0}\ \ (a_0,b_0\in \mathbb N),且 a,bN,a0ab\forall a,b\in\mathbb N,a_0\neq a^b(即底数 a0a_0 不可再开根),那么 b,bb0,x=(a0b0/b)b\forall b,b\mid b_0,x=(a_0^{b_0/b})^b。这意味着假如不去重地暴力添加 nb\lfloor\sqrt[b]{n}\rfloor 到答案中,上文中 xx 将被算 {bb00(modb)}|\{b\mid b_0\equiv 0\pmod b\}| 次。

于是这就变成莫反的模板题了:记 g(b)g(b) 表示“能被 aba^b 表出的 xx 之数量”,f(b0)f(b_0) 表示“恰能被 x=a0b0x=a_0^{b_0} 表出,不可被 x=ab,b<b0x=a^b,b<b_0 表出的 xx 的数量”。易得 g(b)=bb0f(b0)g(b)=\sum_{b\mid b_0}f(b_0),故 f(b0)=b0bg(b)μ(b/b0)f(b_0)=\sum_{b_0\mid b}g(b)\mu(b/b_0)。显然,当 b>log2nb>\log_2 n 时仅有 a=1a=1 满足 abna^b\leq n,故我们只需计算 log2n\lfloor\log_2 n\rfloorbb,最后特判 a=1a=1。预处理出 μ\mu 的值,暴力求取反演式,复杂度为 O(log2n)\operatorname{O}(\log^2 n)


其实并不需要这么麻烦。我们根本不需要反演:根据 g(b)=bb0f(b0)g(b)=\sum_{b\mid b_0}f(b_0),假若 b0,b0>b,f(b0)\forall b_0,b_0>b,f(b_0) 都已经计算完成,那么我们直接得到 f(b)=g(b)bb0,b0>bf(b0)f(b)=g(b)-\sum_{b\mid b_0,b_0>b}f(b_0)。由 bb 从大往小计算即可,复杂度相同。

  • 2023年3月10日