笔记:亚线性筛
一类亚线性筛
亚线性筛是指能在小于线性的复杂度内完成一些筛法的一类筛。
狄利克雷卷积
对于数论函数 \(F\) 和 \(G\) ,定义其狄利克雷卷积为:
几个性质:
- 两个积性函数的迪利克雷卷积仍然是积性函数。
- 结合律:\(F*(G*H)=(F*G)*H\)
- 交换律:\(F*G=G*F\)
- 点积分配:\((F\cdot I)*(G \cdot I)=I\cdot (F*G)\)
杜教筛
对于一类函数 \(F\) ,我们需要求其前缀和 \(S_F(n)\) 。
假设有 \(F*G=H\) ,现在求 \(H\) 的前缀和 \(S_H(n)\) :
将 \(d=1\) 提出来,得到重要等式:
如果 \(F,G\) 还是积性函数,则有 \(F[1]=1\),则可以直接得到 \(S_G(n)\) 的递推式。
由整除分块,右边式子的 \(S_G\) 只有 \(\sqrt{n}\) 种取值,如果我们找的 \(S_H(n)\) 和 \(S_F(n)\) 都能快速计算,那么就可以递归下去计算出 \(S_G(n)\) 。
有关键引理:\(\lfloor\frac{\lfloor\frac{n}{a}\rfloor}{b}\rfloor=\lfloor\frac{n}{ab}\rfloor\) 。
由此,我们只会求解所有 \(\lfloor\frac{n}{d}\rfloor\) 构成的集合的和,由整除分块,这个集合大小是 \(O(\sqrt{n})\) 的。
在记忆化维护下,设 \(F,H\) 的前缀和可以 \(O(1)\) 求解,时间复杂度为 \(O(n^{3/4})\) :整除分块时,进入的位置分别为 \(\{1,2,3,\cdots \sqrt{n}, \frac{n}{1},\frac{n}{2},\cdots \frac{n}{\sqrt{n}}\}\) ,则:
该式积分得到 \(T(n)=n^{3/4}\) 。
需要注意这个复杂度是在记忆化下达成的,其保证了每个位置只计算了一遍,记忆化不需要哈希表,可以发现先存储 \(1,2,\cdots\sqrt{n}\) 的值再存储 \(\frac{n}{1},\frac{n}{2},\cdots,\frac{n}{\sqrt{n}}\) 的值即可。
如果我们通过线性筛预处理出前 \(m\) 项的值,则:
由不等式,\(m=n^{2/3}\) 时,\(T(n)=O(n^{2/3})\) 。
常用变换
有 \(I=1,e=[x=1]\) :
\(\sigma\) 是因数个数,根据这些变换可以推导出更复杂的变换。
由前两个等式,可以用杜教筛求出 \(\varphi\) 和 \(\mu\) 的前缀和。
莫比乌斯反演
若 \(A*I=B\) 则有 \(A=B*\mu\) ,这是由于 \(\mu=I^{-1}\) ,即 \(I\) 的逆。
\(B(n)\) 可以理解为 \(A\) 中所有 \(n\) 的因数的和。
例题
求 \(\sum_{i,j \leq n} i\cdot j\cdot \gcd(i,j),n\leq 10^{10}\)
首先 \(id=\varphi * I\) ,则转化:
改成枚举 \(d\):
这里 \(H(x)=\frac{x(x+1)}{2}\) ,对 \(H\)。
现在求 \(S(n)=\sum_d\varphi(d)d^2=\varphi \cdot id_2\) 。
有 \((\varphi \cdot id_2)*id_2[i]=\sum_{d|i}\varphi(d)*\cdot d^2\cdot (\frac{i}{d})^2=i^2\sum_{d|i}\varphi(d)=i^3\) 。
则 \((\varphi \cdot id_2)*id_2=id_3\) 。
则:
就能求了。
求长 \(n\) 宽 \(m\) 的格点图内选 \(3\) 个点使得构成面积严格小于 \(1\) 的三角形方案,\(2 \leq n,m \leq 10^9\) 。
有个定理(忘了名字了),三角形面积等于内点和加外点除以 \(2\) 再减 \(1\) ,在题目要求下,即要求:没有内点且外点只有 \(3\) 个端点。
考虑划定一个边界框选三角形,可以发现一个 \(a \times b\) 的边界框下,若 \(\gcd(a,b)=1\) 则就有 \(4\) 种选点方法,再在 \(n,m\) 中选框,答案为:
将乘积式子拆开,发现我们需要求 \(\sum [\gcd(a,b)=1],\sum a[\gcd(a,b)=1],\sum b[\gcd(a,b)=1],\sum ab[\gcd(a,b)=1]\) 四个,在莫比乌斯反演后,转化为求 \(\mu,id\cdot \mu,id_2\cdot \mu\) 的前缀和,有:
于是三个都可以杜教筛,复杂度 \(O(n^{2/3})\) 。
值得注意的是,杜教筛和计算答案时的整除分块用到的是同一边界,这在之前的证明中也提到过,事实上杜教筛是对指定函数做块筛,即筛出数论分块下的所有位置的值。
PN 筛
对于一些积性函数,可以拓展杜教筛来求解,对于积性函数 \(F\) ,考虑找到 \(G,H\) 使得 \(F=G*H\),则:
一些神仙发明了 Powerful Number,具体的,考虑找到 \(G(n)\) 为积性函数,其在质数处的取值和 \(F\) 一致,即 \(F(p)=G(p)\) ,那么:
\(G\) 是积性函数则 \(G(1)=1\) ,不妨令 \(H(1)=1\) ,上式解得 \(H(p)=0\) 。
然后由卷积逆运算 \(H=F/G\) 得到 \(H\) 也是积性函数,那么我们由此定义 PN 数:其质因数所有次数都大于 \(1\) 的数。
可以发现 \(H\) 是积性函数,那么只有在 PN 数上 \(H\) 有取值,其余位置都是 \(0\) (特别的 \(H(1)=1\))!
PN 数的强大之处在于:\([1,n]\) 中的 PN 数个数是 \(O(\sqrt{n})\) 的:
可以证明任意 PN 数可以表示成 \(a^2b^3\) 的形式(考虑按质因数次数模 \(3\) 的情况分讨分配),那么可行的 \(a,b\) 只有 \(O(\sqrt{n})\) 种。
\(H\) 是积性函数,对每个质数我们要求解 \(H(p^c)\) 的值,以导出所有的值,考虑带入:
令 \(i=c\) 就得到了 \(H(p^i)\) 向 \(H(p^c)\) 的递推式,而找出所有的 PN,只需要暴力枚举每个质数的次数去搜索即可,时刻注意 PN 的规模是 \(O(\sqrt{n})\) 的,搜索的复杂度是有保证的。
于是,只要 \(G\) 能快速求前缀和,就能计算 \(F\) 的和。
这里需要注意 \(F\) 和 \(G\) 都需要是积性函数,关键在于 \(H=F/G\) 上,只有两个积性函数的多项式变换才是积性函数。
通常,\(G\) 的前缀和需要用杜教筛求解,或者具有良好性质时求能能更快。
递推求解全部 \(H(p^c)\) 的复杂度是 \(O(\sqrt{n}\log n)\) 的,但实际远远小于这个界限,通常求 \(G\) 的前缀和是复杂度的瓶颈。
例题
积性函数 \(F(x)\),\(F(p^c)=p^c(p^c-1)\),求 \(\sum F(x)\),\(n \leq 10^{10}\)
这是 Min25 筛 的模板题,PN 筛的效率略低于 Min25 筛。
考虑令 \(G(x)=x\cdot \varphi(x)\) ,则 \(G(x)\) 在质数处和 \(F(x)\) 同值且为积性函数。
\(G=id \cdot \varphi\) ,有 \(G*id=id_2\) ,于是 \(G\) 的前缀和可以杜教筛。
复杂度为 \(O(n^{2/3})\) ,瓶颈在于杜教筛。
积性函数 \(F(1)=1,F(p^c)=p\oplus c\),求 \(\sum F(i),n \leq 10^{10}\)
纠正一个误区:\(F(p)=G(p)\) 不要求严格满足,这个条件保证的是 \(H(p)=0\) ,保证了 PN 数的规模。
例如这题,直接设 \(G(x)=\varphi(x)\) ,其在 \(x=2\) 时和 \(F\) 不相同,这会导致 \(H(2) \not ={0}\) ,但是我们发现,\(H\) 有值的位置除了 PN 外,还多了所有 PN 乘 \(2\) 的数,总规模还是 \(O(\sqrt{n})\) 的。
Min25在赶来的路上!

浙公网安备 33010602011771号