洛谷题库 P9118 [春季测试 2023] 幂次
我们有非常易于理解的暴力解法:直接对于 b=3,4⋯,求出所有可以当作底数的 a,计算 ab 后放入数据结构/排序去重;特别处理 b=2 的情况即可。在此不再赘述。
不过,我们注意到若有正整数 x,满足 x>1,x=a0b0 (a0,b0∈N),且 ∀a,b∈N,a0=ab(即底数 a0 不可再开根),那么 ∀b,b∣b0,x=(a0b0/b)b。这意味着假如不去重地暴力添加 ⌊bn⌋ 到答案中,上文中 x 将被算 ∣{b∣b0≡0(modb)}∣ 次。
于是这就变成莫反的模板题了:记 g(b) 表示“能被 ab 表出的 x 之数量”,f(b0) 表示“恰能被 x=a0b0 表出,不可被 x=ab,b<b0 表出的 x 的数量”。易得 g(b)=∑b∣b0f(b0),故 f(b0)=∑b0∣bg(b)μ(b/b0)。显然,当 b>log2n 时仅有 a=1 满足 ab≤n,故我们只需计算 ⌊log2n⌋ 个 b,最后特判 a=1。预处理出 μ 的值,暴力求取反演式,复杂度为 O(log2n)。
其实并不需要这么麻烦。我们根本不需要反演:根据 g(b)=∑b∣b0f(b0),假若 ∀b0,b0>b,f(b0) 都已经计算完成,那么我们直接得到 f(b)=g(b)−∑b∣b0,b0>bf(b0)。由 b 从大往小计算即可,复杂度相同。