首页 > 其他 > 详细

杜教筛 学习笔记

时间:2020-05-25 13:04:36      阅读:33      评论:0      收藏:0      [点我收藏+]

前置知识

\(Dirichlet\) 卷积, 数论分块


杜教筛

概念

? 杜教筛用于解决数论函数 \(f(n)\) 的前缀和问题, 即求 :

\[S(n)=\sum_{i=1}^{n}f(i) \]

结论

? 对于任意数论函数 \(g(n)\) , 都有

\[\sum_{i=1}^{n}\sum_{d|i}f(d)g\left(\frac{i}{d}\right)=\sum_{i=1}^{n}g(i)S\left(\left\lfloor\frac{n}{i}\right\rfloor\right) \]

? 即 ( )

\[\sum_{i=1}^{n}(f*g)(i)=\sum_{i=1}^{n}g(i)S\left(\left\lfloor\frac{n}{i}\right\rfloor\right) \]

? \(PS.\) \((f*g)\) 表示函数 \(f(n)\)\(g(n)\)\(Dirichlet\) 卷积.

证明 :

\[\begin{align} \sum_{i=1}^{n}\sum_{d|i}f(d)g\left(\frac{i}{d}\right) &= \sum_{i=1}^{n}g(i)\sum_{j=1}^{\lfloor\frac{n}{i}\rfloor}f(j) \&= \sum_{i=1}^{n}g(i)S\left(\left\lfloor\frac{n}{i}\right\rfloor\right) \end{align} \]

? 得证.

用法

\[\begin{align} &\because\ \sum_{i=1}^{n}(f*g)(i)=\sum_{i=1}^{n}g(i)S\left(\left\lfloor\frac{n}{i}\right\rfloor\right) =g(1)S(n)+\sum_{i=2}^{n}g(i)S\left(\left\lfloor\frac{n}{i}\right\rfloor\right). \&\therefore\ g(1)S(n)=\sum_{i=1}^{n}(f*g)(i)-\sum_{i=2}^{n}g(i)S\left(\left\lfloor\frac{n}{i}\right\rfloor\right). \end{align} \]

? 后面那段可以用数论分块解决, 如果能快速求得 \(\sum_{i=1}^{n}(f*g)(i)\) , 即函数 \((f*g)(n)\) 的前缀和, 那么我们就可以不断递归地求出 \(S(n)\) , 并用 \(map\) 存下已经求得的值

? 在实际题目中, 我们会根据 \(f(n)\) 来确定 \(g(n)\) , 以快速地求出 \((f*g)(n)\) 的前缀和. \(g(n)\) 的选取可以参照下表.

\[\begin{align} \varepsilon &= \mu *1 \ID &= \varphi * 1 \\varphi &= \mu * ID \end{align} \]

? 关于这些函数的意义详见 Dirichlet卷积 莫比乌斯函数 莫比乌斯反演 学习笔记

杜教筛 学习笔记

原文:https://www.cnblogs.com/BruceW/p/12956014.html

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