首页 > 其他 > 详细

【模板】杜教筛

时间:2020-07-18 18:11:22      阅读:27      评论:0      收藏:0      [点我收藏+]

杜教筛用来解决积性函数前缀和的问题。
复杂度为\(O(n^\frac{2}{3})\)
适用情况:
已知函数\(f\),求\(\sum f\)
存在\(f*g=F\),且\(g,\sum g,F,\sum F\)容易求出。

常用公式:
\(\mu*I=[n=1]\)
\(\varphi*I=id\)

以求\(\sum \mu\)为例。

\[\mu*I=[n=1] \\ \sum_{i = 1}^{n}[i = 1] = 1 \1 = \sum_{i = 1}^{n}[i = 1] \]

构造出所求函数\(\mu\)

\[1 = \sum_{i = 1}^{n} \sum_{d | i}\mu(d) \\]

\(t=i/d\)

\[1 = \sum_{t = 1}^{n} \sum_{d = 1}^{\lfloor \frac{n}{t} \rfloor} \mu(d) \\]

\(M(\lfloor \frac{n}{t} \rfloor) = \sum\limits_{d = 1}^{\lfloor \frac{n}{t} \rfloor} \mu(d)\)$

\[1 = \sum_{t = 1}^{n} M(\lfloor \frac{n}{t} \rfloor) \\ M(n) = 1 - \sum_{t = 2}^{n} M(\lfloor \frac{n}{t} \rfloor) \]

对于\(i<10^7\),可以预处理出\(M(i)\)的值,存到数组里。
比较大的数可以通过数论分块递推求解。

qvq

【模板】杜教筛

原文:https://www.cnblogs.com/mogeko/p/13335990.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!