【杜教筛小记】
作者:互联网
虽然挺简单的,但用的不多的话,挺容易忘。
问题模型:
给定一个数论函数\(f\),定义\(S_f(n)=\sum_{i=1}^nf(i)\)
要求在低于线性的时间复杂度求出\(S_f(n)\)
基本原理:
构造一个数论函数\(g\),令\(h=f*g\)
可以得到
\(S_f(n)=\frac{1}{g(1)}(S_h(n)-\sum_{i=2}^ng(i)S_f(\lfloor \frac{n}{i} \rfloor))\)
一般来说\(\frac{1}{g(1)}=1\)
所以有
\(S_f(n)=S_h(n)-\sum_{i=2}^ng(i)S_f(\lfloor \frac{n}{i} \rfloor)\)
观察等式右边,可以用整出分块的技巧,递归计算,那么我们要做的就是快速求出\(S_h(n)\)和\(S_g(n)\)
可以用积分证明复杂度为\(O(n^{3/4})\)
标签:lfloor,frac,sum,rfloor,杜教,ng,复杂度,小记 来源: https://www.cnblogs.com/glq-Blog/p/16545761.html