杜教筛是拿来求积性函数前缀和的东西
\(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\)