杜教筛学习笔记

今天学了一下杜教筛,感觉并没有想象中的那么困难

积性函数

∀ g c d ( n , m ) = 1 \forall gcd(n,m)=1 gcd(n,m)=1,都有 f ( n m ) = f ( n ) f ( m ) f(nm)=f(n)f(m) f(nm)=f(n)f(m)那么称 f f f为积性函数
常见积性函数, μ , φ , ϵ , I , i d \mu,\varphi,\epsilon,I,id μ,φ,ϵ,I,id
ϵ ( n ) = [ n = 1 ] , I ( n ) = 1 , i d ( n ) = n \epsilon(n)=[n=1],I(n)=1,id(n)=n ϵ(n)=[n=1],I(n)=1,id(n)=n

狄利克雷卷积

f , g f,g f,g是两个积性函数,它们的狄利克雷卷积是 ( f ∗ g ) ( n ) = ∑ d ∣ n f ( d ) g ( n d ) (f*g)(n)=\sum_{d|n}f(d)g(\frac{n}{d}) (fg)(n)=dnf(d)g(dn)
满足交换律,结合律
根据部分积性函数的性质可以得到
μ ∗ I = ϵ , φ ∗ I = i d , μ ∗ i d = φ \mu*I=\epsilon,\varphi*I=id,\mu*id=\varphi μI=ϵ,φI=id,μid=φ

杜教筛

已知 f f f是积性函数,如何快速求 S ( n ) = ∑ i = 1 n f ( i ) S(n)=\sum_{i=1}^nf(i) S(n)=i=1nf(i),所谓快速求就是比 O ( n ) O(n) O(n)
考虑找到另一个积性函数 g g g,那么
∑ i = 1 n ( f ∗ g ) ( i ) \sum_{i=1}^n(f*g)(i) i=1n(fg)(i)
= ∑ i = 1 n ∑ d ∣ i g ( d ) f ( i d ) =\sum_{i=1}^n\sum_{d|i}g(d)f(\frac{i}{d}) =i=1ndig(d)f(di)
= ∑ d = 1 n g ( d ) ∑ i = 1 ⌊ n d ⌋ f ( i ) =\sum_{d=1}^ng(d)\sum_{i=1}^{\lfloor \frac{n}{d}\rfloor}f(i) =d=1ng(d)i=1dnf(i)
= ∑ d = 1 n g ( d ) S ( ⌊ n d ⌋ ) =\sum_{d=1}^ng(d)S(\lfloor \frac{n}{d}\rfloor) =d=1ng(d)S(⌊dn⌋)
g ( 1 ) S ( n ) = ∑ i = 1 n ( f ∗ g ) ( i ) − ∑ d = 2 n g ( d ) S ( ⌊ n d ⌋ ) g(1)S(n)=\sum_{i=1}^n(f*g)(i)-\sum_{d=2}^ng(d)S(\lfloor \frac{n}{d}\rfloor) g(1)S(n)=i=1n(fg)(i)d=2ng(d)S(⌊dn⌋)
如果 g g g的前缀和 f ∗ g f*g fg的前缀和都能够 O ( 1 ) O(1) O(1)求的话,后面数论分块递归求解再记忆化一下就可以做到 O ( n 3 4 ) O(n^{\frac{3}{4}}) O(n43)不会证
如果提前用线筛预处理一下 n 2 3 n^{\frac{2}{3}} n32以内的 f f f,时间复杂度可以达到 O ( n 2 3 ) O(n^{\frac{2}{3}}) O(n32)
P4213 【模板】杜教筛(Sum)
分别取 f = μ , g = I , f ∗ g = ϵ f=\mu,g=I,f*g=\epsilon f=μ,g=I,fg=ϵ f = φ , g = I , f ∗ g = i d f=\varphi,g=I,f*g=id f=φ,g=I,fg=id

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值