Note - Powerful Number
Powerful Number
对于 \(n\in\mathbb N_+\),若不存在素数 \(p\) 使得 \(p\mid n~\land~p^2\not\mid n\),则称 \(n\) 为 Powerful Number。即,\(n\) 的每个素因子至少以二次的形式存在。不难发现,任何一个 Powerful Number \(n\) 都可以写成 \(a^2b^3~(a,b\in\mathbb N_+)\) 的形式(但不唯一)。接下来,我们研究其在正整数前缀序列中出现次数的规模,有
所以 \(n\) 以内的 Powerful Number 的数量是 \(\mathcal O(\sqrt n)\) 级别,因此引出了基于 Powerful Number 数量的神奇筛法。
Powerful Number 筛法
给出任意的积性函数 \(f\),求
若按照正常杜教筛的方法,我们很可能无法找到一个 \(g\) 使得 \(f\star g\) 的前缀和易于计算。我们转而引入一个在素数处“拟合” \(f\) 的积性函数 \(g\),即有
同时保证 \(g\) 的前缀和易于计算。接着构造出类似杜教筛的卷积形式,令
那么
有何特别之处呢?考虑任意素数 \(p\):
而 \(g\),\(f=g\star h\) 均为积性函数,所以 \(h\) 为积性函数,况且 \(h(p)\) 恒为 \(0\),所以使得 \(h(a)\not=0\) 的 \(a\) 为 Powerful Number!我们只需要预处理出 \(\mathcal O(\sqrt n)\) 个 \(g\) 的前缀和,再大力搜索不为 \(0\) 的 \(h(a)\),就能算出上式的结果啦!
例题
「LOJ #6053」简单的函数
Link.
积性函数 \(f\) 满足 \(f(p^c)=p\oplus c~(p\in\mathbb P,c\in\mathbb N_+)\),求 \(\sum_{i=1}^n f(i)\bmod(10^9+7)\)。
\(n\le10^{10}\)。
首先,考虑 \(f\) 的素数点值:
由 \(p-1\) 联想到 \(\varphi(p)=p-1\),可惜 \(\varphi(2)=1\)。干脆一点,我们直接强行把 \(\varphi\) 的偶数点值乘上 \(3\),令
显然它也是积性函数。
接着,求 \(g\) 的前缀和。其前缀和为 \(\varphi\) 的前缀和加上两倍偶数点的 \(\varphi\) 前缀和。记
杜教筛处理 \(\varphi\) 的前缀,\(S\) 就能在可观(我不会算 qwq)的复杂度内预处理出来,继而也得到了 \(g\) 的 \(\mathcal O(\sqrt n)\) 个前缀和。
此外,我们还需要求 \(h(i)\),即求 \(h(p^c)~(c>1)\)。考虑 \(f(p^c)\) 与它的关系:
顺手把 \(\mathcal O(\sqrt n\ln\ln\sqrt n)\)(\(n\) 以内素数的倒数和的规模是 \(\mathcal O(\ln\ln n)\))个 \(h(p^c)\) 也预处理出来,最后 \(\mathcal O(\sqrt n)\) 搜索 Powerful Number 就能求出答案啦!
代码可见我的博客。
「洛谷 P5325」Min_25 筛
Link.
对于积性函数 \(f(x)\),有 \(f(p^k)=p^k(p^k-1)~(p\in\mathbb P,k\in\mathbb N_+)\)。求 \(\sum_{i=1}^nf(i)\bmod(10^9+7)\)。
\(n\le10^{10}\)。
Min_25 筛是不可能的。
Powerful Number 三步走咯!考虑素数点值:
那么令 \(g=\operatorname{id}\cdot\varphi\)(点乘号即数值相乘),就有 \(g(p)=p^2-p\)。积性函数的点乘亦为积性函数。
求 \(g\) 的前缀和,杜教筛基础操作,卷上一个 \(\operatorname{id}\):
自然数平方和易求,丢到杜教筛的式子里,推导后得出
其中 \(S(n)\) 即为 \(\sum_{i=1}^ng(i)\)。
求 \(h(p^k)\),可以用 Bell 级数推导。令 \(F_p,G_p,H_p\) 分别为 \(f,g,h\) 在某一素数 \(p\) 的 Bell 级数,则
应用“两函数 Bell 级数的乘法卷积”为“原函数 Dirichlet 卷积之 Bell 级数”的性质,得到
我们仅仅想求 \(h(p^k)\),即 \([z^k]H_p\),那么
最终,\(\mathcal O(n^{\frac{2}{3}})\) 就能求出答案啦。
代码可见我的博客。
总结
- Powerful Number 指每个素因子至少是二次的正整数;
- \([1,n]\) 内的 Powerful Number 个数为 \(\mathcal O(\sqrt n)\);
- Powerful Number 筛法的步骤为:
- 对于 \(f\),找到素数点值与其相同的,方便求前缀和的函数 \(g\);
- 预处理/在线求 \(g\) 的 \(\mathcal O(\sqrt n)\) 个前缀和;
- 预处理/在线求 \((f\star g^{-1})(p^k)\),可以暴力计算或尝试 Bell 级数;
- 爆搜 Powerful Number 统计答案。
- 此筛法是否优秀大部分取决于第三步,即能否快速计算 \((f\star g^{-1})(p^k)\)。