杜教筛学习笔记

杜教筛

杜教筛用于计算函数的前缀和。

若需要计算前缀和的函数为 f f f,前缀和函数为 S S S,那么有 S ( n ) = ∑ i = 1 n f ( i ) S(n)=\sum_{i=1}^{n}f(i) S(n)=i=1nf(i)。现在通过构造一个合适的函数 g g g,优化其计算过程。

对于任意和两个函数 f , g f,g f,g,以下均成立:
∑ i = 1 n ∑ d ∣ i g ( d ) f ( i d ) = ∑ i = 1 n g ( i ) ∑ i = 1 ⌊ n i ⌋ f ( i ) = ∑ i = 1 n g ( i ) S ( ⌊ n i ⌋ ) g ( 1 ) S ( n ) = ∑ i = 1 n ( g ∗ f ) ( i ) − ∑ i = 2 n g ( i ) S ( ⌊ n i ⌋ ) \sum_{i=1}^{n}\sum_{d|i}g(d)f(\frac{i}{d})=\sum_{i=1}^{n}g(i)\sum_{i=1}^{\lfloor \frac{n}{i} \rfloor} f(i)=\sum_{i=1}^{n}g(i)S(\lfloor \frac{n}{i} \rfloor) \\ g(1)S(n)=\sum_{i=1}^{n}(g*f)(i)-\sum_{i=2}^{n}g(i)S(\lfloor \frac{n}{i} \rfloor) i=1ndig(d)f(di)=i=1ng(i)i=1inf(i)=i=1ng(i)S(in)g(1)S(n)=i=1n(gf)(i)i=2ng(i)S(in)
可以发现等式右边减法部分,关于 S ( ⌊ n i ⌋ ) S(\lfloor \frac{n}{i} \rfloor) S(in)的部分是数论分块的形式,如果函数 g g g能够快速的计算一段的和(前缀和),那么后半部分就可以用数论分块的形式解决。同时,前半部分在迪利克雷卷积之后得到的函数如果能快速计算前缀和,那么这个转移就可以快速计算了。

分析一下可以发现,由于 S ( x ) S(x) S(x) x x x的的取值全部都可以表示成 ⌊ n x ′ ⌋ \lfloor \frac{n}{x'} \rfloor xn的形式,所以只会有 n \sqrt n n 种取值。

并且在杜教筛之前可以预处理一部分前缀和,这样可以跑的更快。

提要

要构造一个函数 g g g,满足如下条件:

  1. 与求前缀和的函数 f f f,迪利克雷卷积之后方便计算
  2. 本身方便计算
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值