Powerful Number 筛

Powerful Number 是一种奇特的亚线性数论筛。

我们先来定义 Powerful Number:如果一个正整数 \(n\) 的标准分解为:

\[n=\sum p_i^{k_i} \]

且满足 \(\forall i,\ k_i\geq 2\),那么我们就称 \(n\) 为一个 Powerful Number。

那么我们一定可以把 \(n\) 表为 \(n=a^2b^3\) 的形式。由此我们可以知道,\(\leq n\) 的 Powerful Number 个数为:

\[\int_1^\sqrt n(\frac n{x^2})^{1/3}\ \mathrm dx=\mathcal O(\sqrt n) \]

这是一切的基础。

现在考虑我们要筛某个积性函数 \(f\),我们先找到另一个容易得到前缀和的积性函数 \(g\),满足

\[g(p)=f(p) \]

然后这时候我们再假设 \(f=g\otimes h\),那么一定有:

\[f(p)=g(p)h(1)+g(1)h(p)=f(p)+h(p) \]

也即

\[h(p)=0 \]

那么可以推知,仅当 \(n\) 为 Powerful Number 时,才有 \(h(n)\neq 0\),那么有值的 \(h\) 其实只有 \(\mathcal O(\sqrt n)\) 种。

现在来考虑 \(f\) 的前缀和:

\[\begin{aligned} \sum_{n=1}^Nf(n)&=\sum_{n=1}^N\sum_{d\mid n}g(d)h(\frac nd)\\ &=\sum_{d=1}^N h(d)\sum_{k=1}^{N/d}g(k) \end{aligned} \]

于是枚举每个可能的 \(h\),递推计算取值,暴力计算即可。

一些具体的应用可以参见一类积性函数的特殊前缀和问题

posted @ 2020-12-11 23:52  whx1003  阅读(572)  评论(0编辑  收藏  举报