Powerful Number 筛

Powerful Number 筛(PN 筛)可以解决一些求积性函数前缀和的问题。要求能构造出一个积性函数 \(g\),满足:

  • \(g\) 容易求前缀和;
  • 对于质数 \(p\)\(f(p) = g(p)\)

称一个数 \(x\)Powerful Number(PN)当且仅当 \(x\) 的质因数分解中,所有质因数的指数都 \(\ge 2\)\(1\) 是 PN。

有结论 \(\le n\) 的 PN 有 \(O(\sqrt{n})\) 个。并且若线性筛出 \(\le \sqrt{n}\) 的所有质数,枚举每个质数的指数,就可以在 \(O(\sqrt{n})\) 的时间复杂度内搜索出所有 PN。

假设我们已经构造出一个满足条件的 \(g\)。假设有一个积性函数 \(h\),满足 \(f = g * h\)。那么有 \(f(p) = g(1) h(p) + g(p) h(1) = g(p) + h(p)\),又因为 \(f(p) = g(p)\),所以 \(h(p) = 0\)。所以 \(h(x)\) 有值当且仅当 \(x\) 是 PN

推一下式子:

\[\begin{aligned} \sum\limits_{i = 1}^n f(i) & = \sum\limits_{ij \le n} g(i) h(j) \\ & = \sum\limits_{i = 1}^n h(i) \sum\limits_{j = 1}^{\left\lfloor\frac{n}{i}\right\rfloor} g(j) \end{aligned} \]

因此我们只用枚举所有 \(\le n\) 的 PN,然后快速计算 \(\sum\limits_{j = 1}^{\left\lfloor\frac{n}{i}\right\rfloor} g(j)\) 即可。

问题来到如何计算 \(h(i)\)。因为 \(h\) 是积性函数,所以只用考虑如何计算 \(h(p^k)\)。根据 \(f = g * h\) 有:

\[f(p^k) = \sum\limits_{i = 0}^k g(p^i) h(p^{k - i}) \]

因此:

\[h(p^k) = f(p^k) - \sum\limits_{i = 0}^{k - 1} g(p^{k - i}) h(p^i) \]

进而可以暴力在 \(O(\sqrt{n})\) 的时间复杂度内计算。

\(g\) 的前缀和能 \(O(1)\) 计算,那么 PN 筛的时间复杂度为 \(O(\sqrt{n})\)

例题

1. P5325 【模板】Min_25 筛

考虑构造 \(g = (id \cdot \varphi)\),那么 \(g\) 的前缀和可以使用杜教筛计算(\(id^2 = (id \cdot \varphi) * id\))。

时间复杂度 \(O(n^{\frac{2}{3}})\),瓶颈在杜教筛。

2. 2023.10.3 NOIP 模拟赛 T2 数论

考虑构造 \(g = I * id\)。那么 \(\sum\limits_{i = 1}^n g(i) = \sum\limits_{i = 1}^n i \left\lfloor\frac{n}{i}\right\rfloor\)。若使用整除分块计算,设 \(P\) 为 PN 集合,时间复杂度 \(O(\sum\limits_{x \in P} \frac{n}{x}) = O(\sqrt{n} \log n)\)

3. LOJ6053 简单的函数

考虑构造:

\[g(x) = \begin{cases} 3 \varphi(x) & 2 \mid x \\ \varphi(x) & 2 \nmid x \end{cases} \]

那么 \(\sum\limits_{i = 1}^n g(i) = \sum\limits_{i = 1}^n \varphi(i) + 2 \sum\limits_{i = 1}^{\left\lfloor\frac{n}{2}\right\rfloor} \varphi(2i)\),可以杜教筛解决。

posted @ 2023-10-06 20:12  zltzlt  阅读(274)  评论(0)    收藏  举报