笔记:亚线性筛

一类亚线性筛

亚线性筛是指能在小于线性的复杂度内完成一些筛法的一类筛。

狄利克雷卷积

对于数论函数 \(F\)\(G\) ,定义其狄利克雷卷积为:

\[(F*G)[n]=\sum_{d | n}F[d]\cdot G[n/d] \]

几个性质:

  • 两个积性函数的迪利克雷卷积仍然是积性函数。
  • 结合律:\(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)\)

\[\begin{align*} S_H(n)&=\sum_{i=1}^n\sum_{d|i}F[d]\cdot G[n/d] \\ &=\sum_{d=1}^nF[d]\sum_{i=1}^{\lfloor\frac{n}{d}\rfloor} G[i]\\ &=\sum_{d=1}^nF[d]\cdot S_G(\lfloor\frac{n}{d}\rfloor) \end{align*}\]

\(d=1\) 提出来,得到重要等式:

\[F[1]S_G(n)=S_H(n)-\sum_{d=2}^nF[d]\cdot S_G(\lfloor\frac{n}{d}\rfloor) \]

如果 \(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)=\sum_{i=1}^{\sqrt{n}}\sqrt{i}+\sqrt{\frac{n}{i}} \]

该式积分得到 \(T(n)=n^{3/4}\)

需要注意这个复杂度是在记忆化下达成的,其保证了每个位置只计算了一遍,记忆化不需要哈希表,可以发现先存储 \(1,2,\cdots\sqrt{n}\) 的值再存储 \(\frac{n}{1},\frac{n}{2},\cdots,\frac{n}{\sqrt{n}}\) 的值即可。

如果我们通过线性筛预处理出前 \(m\) 项的值,则:

\[T(n)=m+\sum_{i=1}^{n/m}\sqrt{\frac{n}{i}}=m+\frac{n}{\sqrt{m}} \]

由不等式,\(m=n^{2/3}\) 时,\(T(n)=O(n^{2/3})\)

常用变换

\(I=1,e=[x=1]\)

\[\begin{align*} \varphi * I &= id \\ \mu * I &= e \\ I * I &= \sigma \end{align*}\]

\(\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\) ,则转化:

\[\sum_{i,j}i\cdot j\sum_{d|\gcd(i,j)}\varphi(d) \]

改成枚举 \(d\)

\[\begin{align*} =&\sum_d\varphi(d)\sum_{d|i}i\sum_{d|j}j \\ =&\sum_d\varphi(d)d^2H(\lfloor\frac{n}{d}\rfloor) \end{align*}\]

这里 \(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\)

则:

\[S(n)=(\frac{n(n+1)}{2})^2-\sum_{i=2}i^2S(\lfloor\frac{n}{i}\rfloor) \]

就能求了。

求长 \(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_{a=1}^{n}\sum_{b=1}^{m}4(n-a+1)(m-b+1)[\gcd(a,b)=1] \]

将乘积式子拆开,发现我们需要求 \(\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\) 的前缀和,有:

\[\begin{align*} \mu * I&=e\\ (id\cdot \mu) * id &=id \\ (id_2 \cdot \mu) * id_2 &=id_2 \end{align*}\]

于是三个都可以杜教筛,复杂度 \(O(n^{2/3})\)

值得注意的是,杜教筛和计算答案时的整除分块用到的是同一边界,这在之前的证明中也提到过,事实上杜教筛是对指定函数做块筛,即筛出数论分块下的所有位置的值。

PN 筛

对于一些积性函数,可以拓展杜教筛来求解,对于积性函数 \(F\) ,考虑找到 \(G,H\) 使得 \(F=G*H\),则:

\[\begin{align*} \sum_i^n F &=\sum_i\sum_{d|i} H(d)\cdot G(\frac{i}{d})\\ &=\sum_dH(d) \sum_{i=1}^{\lfloor n/i\rfloor} G(i) \end{align*}\]

一些神仙发明了 Powerful Number,具体的,考虑找到 \(G(n)\) 为积性函数,其在质数处的取值和 \(F\) 一致,即 \(F(p)=G(p)\) ,那么:

\[F(p)=G(p)H(1)+G(1)H(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)\) 的值,以导出所有的值,考虑带入:

\[F(p^c)=\sum_{i=0}^c H(p^i)G(p^{c-i}) \]

\(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})\) 的。

code LOJ

Min25在赶来的路上!

posted @ 2025-09-05 21:51  蒻蒻虫  阅读(16)  评论(0)    收藏  举报