码迷,mamicode.com
首页 > 其他好文 > 详细

杜教筛

时间:2017-09-19 23:02:13      阅读:375      评论:0      收藏:0      [点我收藏+]

标签:limit   时间复杂度   方便   limits   rac   .com   复杂   时间   floor   

从省选开始挖的坑现在补..


很好的参考资料..

糖老师的blog

吉丽的blog


填坑计划

这是由杜老师引进中国oi的算法.. 用低于线性时间来算积性函数的前缀和

一般就是找另外一个积性函数卷积起来变成一个更方便计算前缀和的东西,以降低数据规模从而达到降低时间复杂度

比如说要计算$\sum_{i=1}^n\mu(i)$,由于$1*\mu=\epsilon$,也就是先计算$\epsilon$的前缀和

$$\sum_{i=1}^n\epsilon(i)=\sum_{i=1}^n\sum_{d|n}\mu(d)$$

设$i‘d=i$

$$\sum_{i=1}^n\sum_{d|n}\mu(d)=\sum_{i‘=1}^n\sum_{d=1}^{\lfloor\frac{n}{i‘}\rfloor}\mu(d)$$

把$i‘=1$的分离出来就是要求的$S(n)$

$$\sum_{i‘=1}^n\sum_{d=1}^{\lfloor\frac{n}{i‘}\rfloor}\mu(d)=\sum_{d=1}^{n}\mu(d)+\sum_{i‘=2}^n\sum_{d=1}^{\lfloor\frac{n}{i‘}\rfloor}\mu(d)$$

后面的一段就是缩小规模的求前缀和了.. 递归即可,要记忆化

这样子的复杂度是$O(n^{\frac{3}{4}})$,如果线性筛前面$n^{\frac{2}{3}}$就可以做到$O(n^{\frac{2}{3}})$

 

按照吉丽说的一般有这样两种形式:

1)求$S(n)=\sum\limits_{i=1}^n(f\cdot g)(i)$,且$g(i)$为完全积性函数

$$\sum_{i=1}^n[(f*1)\cdot g](i)=\sum_{i=1}^ng(i)S(\lfloor\dfrac{n}{i}\rfloor)$$

2)求$S(n)=\sum\limits_{i=1}^n(f*g)(i)$

$$\sum_{i=1}^ng(i)\sum_{ij\leq n}(f*1)(j)=\sum_{i=1}^nS(\lfloor\dfrac{n}{i}\rfloor)$$

杜教筛

标签:limit   时间复杂度   方便   limits   rac   .com   复杂   时间   floor   

原文地址:http://www.cnblogs.com/darklove/p/7554314.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!