powerful-number-shai-xue-xi-bi-ji

Powerful Number筛学习笔记

本文参考了 \(\texttt{fjzzq2004}\) 大佬,攀岩高手大佬和日居月诸大佬的博客。

\(\mathbf{Powerful\;Number}\) 筛是一类在亚线性复杂度内求出积性函数前缀和的算法。

定义

设正整数 \(\displaystyle n=\prod_{i=1}^wp_i^{k_i}\),若 \(\forall 1\le i\le w\) 满足 \(k_i\ge2\),即 \(n\) 的所有质因子的幂均大于等于 \(2\),称 \(n\) 为一个 \(\mathbf{Powerful\;Number}\)。特别地,\(1\) 也是一个 \(\mathbf{Powerful\;Number}\)

有了 \(\mathbf{Powerful\;Number}\) 的定义以后,我们可以得出一个结论:

  • 小于等于 \(n\)\(\mathbf{Powerful\;Number}\) 仅有 \(\mathcal O(\sqrt n)\) 个。

证明:注意到 \(\mathbf{Powerful\;Number}\) 一定可以表示为 \(x^2y^3\) 的形式 \((x,y\in\mathbb{N}^+)\)

于是 \(\le n\)\(\mathbf{Powerful\;Number}\) 个数为

\(\begin{aligned} \mathcal O\left(\sum_{x=1}^{\sqrt n}\sqrt[3]{\frac{n}{x^2}}\right) &=\mathcal O\left(\sqrt[3]{n}\int_{1}^{\sqrt n}x^{- \frac{2}{3}}dx\right)\\ &=\mathcal O(\sqrt{n})\quad\blacksquare \end{aligned}\)

应用

P5325 【模板】Min_25筛

定义积性函数 \(f(x)\),当 \(p\) 为质数时满足 \(f(p^k)=p^k(p^k-1)\),求 \(\displaystyle\sum_{i=1}^nf(i)\)

下文假设 \(p\) 表示的数为质数。

构造一个积性函数 \(g\),使它与 \(f\) 在质数处取值相等。这里可以找到 \(g(x)=x\varphi(x)\),因为我们有 \(\varphi(p)=p-1\)

设积性函数 \(h\) 满足 \(f=g*h\),那么 \(f(p)=g(1)h(p)+g(p)h(1)\)

由于 \(g,h\) 为积性函数,\(g(1)=h(1)=1\)

因此 \(h(p)=f(p)-h(p)=0\)

又因为 \(h\) 为积性函数,那么 \(h\) 仅在 \(\mathbf{Powerful\;Number}\) 处不为 \(0\)

回到原式:

\(\begin{aligned} \sum_{i=1}^nf(i) &=\sum_{i=1}^n\sum_{d|i}h(d)g(\frac{i}{d})\\ &=\sum_{d=1}^nh(d)\sum_{i=1}^{\lfloor\frac{n}{d}\rfloor}g(i) \end{aligned}\)

由于 \(h\) 仅在 \(\mathbf{Powerful\;Number}\) 处不为 \(0\),接下来只需要考虑当 \(d\)\(\mathbf{Powerful\;Number}\)\(h(d)\) 的值和 \(g\) 函数的前缀和。

显然 \(g\) 函数的前缀和可以直接杜教筛。

剩下的 \(h\) 如何计算?由于 \(h\) 是积性函数,我们可以算出 \(h(p^k)\) 后再递推。根据 \(\mathbf{Powerful\;Number}\) 的性质,我们只需计算 \(p\le\sqrt n\) 的情况。

回到 \(f\)

\(\begin{aligned} f(p^k) &=\sum_{i=0}^kg(p^i)h(p^{k-i})\\ &=\sum_{i=0}^kp^i\varphi(p^i)h(p^{k-i})\\ &=h(p^k)+\sum_{i=1}^kp^i(p-1)p^{i-1}h(p^{k-i})\\ &=h(p^k)+\sum_{i=1}^k(p-1)p^{2i-1}h(p^{k-i})\\ \end{aligned}\)

\(\begin{aligned} p^k(p^k-1) &=h(p^k)+\sum_{i=1}^k(p-1)p^{2i-1}h(p^{k-i})\\ &=h(p^k)+\sum_{i=0}^{k-1}(p-1)p^{2k-2i-1}h(p^i) \cdots\cdots\cdots\cdots\mathbf I\\ \end{aligned}\)

\(k-1\) 代替 \(k\),则

\(\displaystyle p^{k-1}(p^{k-1}-1)=h(p^{k-1})+\sum_{i=0}^{k-2}(p-1)p^{2k-2i-3}h(p^i)\)

同时乘 \(p^2\),得

\(\displaystyle p^{k+1}(p^{k-1}-1)=p^2h(p^{k-1})+\sum_{i=0}^{k-2}(p-1)p^{2k-2i-1}h(p^i)\cdots\cdots\cdots\cdots\mathbf{II}\)

\(\mathbf{I}\)\(\mathbf{II}\) 得:

\(p^{2k}-p^{k}-p^{2k}+p^{k+1}=h(p^k)-p^2h(p^{k-1})+(p-1)p^{2k-2(k-1)-1}h(p^{k-1 })\)

整理一下:

\(h(p^k)-ph(p^{k-1})=p^{k+1}-p^k\)

同时除以 \(p^k\),得

\(\displaystyle\frac{h(p^k)}{p^k}-\frac{h(p^{k-1})}{p^{k-1}}=p-1\)

\(k-1,k-2,k-3,\cdots,2\) 替换上式的 \(k\)

\(\begin{cases} \displaystyle\frac{h(p^{k-1})}{p^{k-1}}-\frac{h(p^{k-2})}{p^{k-2}}=p-1\\ \displaystyle\frac{h(p^{k-2})}{p^{k-2}}-\frac{h(p^{k-3})}{p^{k-3}}=p-1\\ \displaystyle\frac{h(p^{k-3})}{p^{k-3}}-\frac{h(p^{k-4})}{p^{k-4}}=p-1\\ \cdots\\ \displaystyle\frac{h(p^2)}{p^2}-\frac{h(p)}{p}=p-1\\ \end{cases}\)

连同原式,左边累加右边累加,得到:

\(\displaystyle\frac{h(p^k)}{p^k}-\frac{h(p)}{p}=(k-1)(p-1)\)

又因为 \(h(p)=0\),我们得到了 \(h(p^k)\) 的通项公式:

\(h(p^k)=p^k(k-1)(p-1)\)

至此,我们在 \(\mathcal O(n^{\frac{2}{3}})\) 的复杂度内完成了此题,瓶颈在于杜教筛。

如果 \(g\) 函数的前缀和可以快速求出,\(\mathbf{Powerful\;Number}\) 筛的复杂度将降至 \(\mathcal O(\sqrt n)\)

posted @ 2024-03-04 20:47  iorit  阅读(19)  评论(0)    收藏  举报