【学习笔记】Powerful Number 筛
有力量的数字筛(?)
Powerful Number
有力量的数字(?)
定义一个数 \(n\) 为 Powerful Number(简称 PN),当且仅当 \(n\) 没有非平方因子。
也即,若 \(n=\prod p_i^{e_i}\),则 \(\forall e_i>1\)。
Lemma
保障 PN 筛时间复杂度的一个性质。
\(n\) 以内的 PN 个数为 \(O(\sqrt n)\)。
首先,考虑每个 PN 可以被表示为 \(a^3b^2\) 的形式,构造方法是质因数分解后,把幂次为奇数的质数分给 \(a^3\) 一个,剩下分给 \(b^2\)。枚举 \(b\) 然后积分就可以得到 PN 的数量:
Description
求积性函数前缀和。
对于要求前缀和的积性函数 \(f\),构造可以快速计算前缀和的拟合函数 \(g\) 使得 \(f(p)=g(p)\)。再构造 \(h\) 使得 \(f=g*h\)。显然有 \(f(p)=g(p)h(1)+g(1)h(p)\),可得 \(h(p)=0\)。因此 \(h\) 仅在 \(1\) 和 PN 处有取值。然后把 \(f\) 的前缀和做一下变换:
因为 \(h\) 仅在 \(O(\sqrt n)\) 个 \(d\) 值处有取值,可以直接搜索 \(d\) 的取值。
若 \(g\) 的前缀和能 \(O(1)\) 计算,则复杂度为 \(O(\sqrt n)\)。
\(h\) 的取值可以在特定题目直接推导,也可以记忆化后计算。通过定义式 \(f=g*h\) 得到 \(f(p^e)=\sum_{i=0}^eg(p^i)h(p^{e-i})\),移项得到 \(h(p^e)=f(p^e)-\sum_{i=1}^eg(p^i)h(p^{e-i})\) 即可计算。
Problems
P5325 【模板】Min_25筛
令积性函数 \(f(p^e)=p^e(p^e-1)\),求 \(f\) 前缀和。
在质数处,构造 \(g=\text{id}\cdot\varphi\) 拟合 \(f\)。\(g\) 可以通过杜教筛求前缀和。注意到式子所需要的 \(g\) 前缀和求一次 \(\sum_{i=1}^ng(i)\) 即可得到,因此复杂度瓶颈在这次杜教筛,总体复杂度为 \(O(n^{2/3})\)。
这题也可直接计算 \(h(p^e)=(e-1)(p-1)p^e\)。证明不写了。
Loj #6053. 简单的函数
定义积性函数 \(f\):
\[f(n)=\begin{cases}1&n=1\\p\oplus e&n=p^e\\f(a)f(b)&n=ab,a\perp b\end{cases} \]求 \(f\) 前缀和。
异或有点烦。按奇偶性分类:
构造 \(g\):
显然 \(g\) 为积性函数。考虑计算 \(g\) 的前缀和:
\(S_1(n)=\sum_{i=1}^n\varphi(n)\),可以杜教筛。
递归计算。
Extend
有时候拟合函数 \(g\) 不是很好找。这时可以构造一个 \(g\),使得 \(h=f/g\) 仅在少数位置有取值。
SP34112 UDIVSUM
\(\sigma^*(p^e)=p^e+1\),求前缀和。
构造 \(g=\sigma\),即约数和,可以数论分块 \(O(\sqrt n)\) 求。写 divcnt1 的都是狗
令 \(h=\sigma^*/\sigma\),发现 \(h(1)=1,h(p^2)=-p\),其余位置均无取值。于是可以 PN 筛,注意幂次处理。