杜教筛学习笔记

强颜欢笑 提交于 2019-11-30 19:39:22

杜教筛

杜教筛作用:

\(O(n^{\frac{2}{3}})\)的时间复杂度求出积性函数的前缀和

具体方法:

如要求:\(S(n)=\sum\limits_{i=1}^nf(i)\)

先任取一个积性函数\(g(n)\)\(f(n)\)卷积一下,得到:

  • \((f*g)(n)=\sum\limits_{d|n}g(d)f(\dfrac{n}{d})\)  , 对该卷积求前缀和,得到:
  • \(\sum\limits_{i=1}^n(f*g)(i)=\sum\limits_{i=1}^n\sum\limits_{d|i}g(d)f(\dfrac{i}{d})\)   ,改变枚举顺序,把\(g(d)\)提到前面来,可得:
  • \(=\sum\limits_{d=1}^ng(d)\sum\limits_{i=1}^{\lfloor\frac{n}{d}\rfloor}f(i)\)  ,再代入\(S\)函数:
  • \(=\sum\limits_{d=1}^ng(d)S(\lfloor\dfrac{n}{d}\rfloor)\)

  • 于是我们得到了 \(\sum\limits_{i=1}^n(f*g)(i)=\sum\limits_{i=1}^ng(i)S(\lfloor\dfrac{n}{i}\rfloor)\)  (换成\(i\)舒服一点...)

然后显然有 \(g(1)S(n)=\sum\limits_{i=1}^ng(i)S(\lfloor\dfrac{n}{i}\rfloor)-\sum\limits_{i=2}^ng(i)S(\lfloor\dfrac{n}{i}\rfloor)\)

把上面推得的式子代入可得:\(g(1)S(n)=\sum\limits_{i=1}^n(f*g)(i)-\sum\limits_{i=2}^ng(i)S(\lfloor\dfrac{n}{i}\rfloor)\)

假如我们要求的是 \(\sum\limits_{i=1}^n\mu(i)\),把\(f\)换成\(\mu\)

\(g(1)S(n)=\sum\limits_{i=1}^n(\mu*g)(i)-\sum\limits_{i=2}^ng(i)S(\lfloor\dfrac{n}{i}\rfloor)\)

因为我们知道 \(\mu * 1 = ϵ\),如果把 \(g\)\(1\) 代入,那么\(g(1)=1\)\(\sum\limits_{i=1}^nϵ(i)=1\)\(\sum\limits_{i=2}^n1(i)=1\)

整个式子会变得十分美妙~

  • 即为 \(S(n)=1-\sum\limits_{i=2}^nS(\lfloor\dfrac{n}{i}\rfloor)\)
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!