杜教筛学习笔记

杜教筛是拿来求积性函数前缀和的东西

\(h=f*g\)
\(s(n)=\sum\limits_{i=1}^ng(i)\)
而杜教筛可以在 \(O(n^{\frac 23})\) 的复杂度内求出 \(s(n)\),前提是存在两个很好求前缀和的函数 \(f\)\(h\) 满足 \(h=f*g\)
\(\sum\limits_{i=1}^{n}h(i)\)\(\sum\limits_{i=1}^n\sum\limits_{j|i}f(j)g(\frac{i}{j})\)
\(=\sum\limits_{i=1}^nf(i)\sum\limits_{j=1}^{\lfloor\frac{n}{d}\rfloor}g(j)\)
\(=\sum\limits_{i=1}^nf(i)s(\lfloor\frac{n}{i}\rfloor)\)
\(\sum\limits_{i=1}^nh(i)=\sum\limits_{i=1}^nf(i)s(\lfloor\frac{n}{i}\rfloor)\)
\(\sum\limits_{i=1}^nh(i)=\sum\limits_{i=2}^nf(i)s(\lfloor\frac{n}{i}\rfloor)+s(n)f(1)\)
\(\sum\limits_{i=1}^nh(i)-\sum\limits_{i=2}^nf(i)s(\lfloor\frac{n}{i}\rfloor)=s(n)f(1)\)

到这里就可以用整除分块求了,这样解出复杂度 \(O(n^{\frac 34})\)

但是可以用欧拉筛预处理在 \(O(n^{\frac 23})\) 以内的前缀和,复杂度降到 \(O(n^{\frac 23})\)



常用函数
\(\phi*I=id\)
\(\mu*I=e\)

posted @ 2023-01-02 18:44  灰鲭鲨  阅读(22)  评论(0)    收藏  举报