【学习笔记】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 的数量:
\[\sum_{b=1}^{n^{1/2}}\left(\frac{n}{b^2}\right)^{1/3}\le\int_{1}^{n^{1/2}}\left(\frac{n}{x^2}\right)^{1/3}\text dx=O(\sqrt n) \]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\) 的前缀和做一下变换:
\[\begin{aligned} \sum_{i=1}^nf(i)=&\sum_{i=1}^n\sum_{d\mid n}g(\frac nd)h(d)\\ =&\sum_{d=1}^n\sum_{i=1}^{\lfloor\frac nd\rfloor}g(i)h(d)\\ =&\sum_{d=1}^nh(d)G(\lfloor\frac nd\rfloor) \end{aligned} \]因为 \(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\) 前缀和。
异或有点烦。按奇偶性分类:
\[f(p)=\begin{cases}3&p=2\\p-1&p\not=2\end{cases} \]构造 \(g\):
\[g(p)=\begin{cases}3\varphi(p)&p=2\\\varphi(p)&p\not=2\end{cases} \]显然 \(g\) 为积性函数。考虑计算 \(g\) 的前缀和:
\[\begin{aligned} G(n)=&\sum_{i=1}^ng(i)\\ =&\sum_{i=1}^n[i\equiv1\pmod2]\varphi(i)+3\sum_{i=1}^n[i\equiv0\pmod2]\varphi(i)\\ =&\sum_{i=1}^n\varphi(i)+2\sum_{i=1}^n[i\equiv0\pmod2]\varphi(i)\\ =&\sum_{i=1}^n\varphi(i)+2\sum_{i=1}^{\lfloor\frac n2\rfloor}\varphi(2i)\\ =&S_1(n)+2S_2(\lfloor\frac n2\rfloor) \end{aligned} \]\(S_1(n)=\sum_{i=1}^n\varphi(n)\),可以杜教筛。
\[\begin{aligned} S_2(n)=&\sum_{i=1}^n\varphi(2i)\\ =&\sum_{i=1}^n[i\equiv1\pmod2]\varphi(2i)+\sum_{i=1}^n[i\equiv0\pmod2]\varphi(2i)\\ =&\sum_{i=1}^n[i\equiv1\pmod2]\varphi(i)+2\sum_{i=1}^n[i\equiv0\pmod2]\varphi(i)\\ =&\sum_{i=1}^n\varphi(i)+\sum_{i=1}^n[i\equiv0\pmod2]\varphi(i)\\ =&S_1(n)+S_2(\lfloor\frac n2\rfloor) \end{aligned} \]递归计算。
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 筛,注意幂次处理。
标签:frac,前缀,sum,Powerful,Number,varphi,pmod2,笔记,PN 来源: https://www.cnblogs.com/resorie/p/notes-PN.html