数论学习笔记2之杜教筛初探(含例题练习)
Posted cqust_qilin02811
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数论学习笔记2之杜教筛初探(含例题练习)相关的知识,希望对你有一定的参考价值。
杜教筛
前言
实际上本次例题涉及的杜教筛不麻烦,麻烦的是例题的式子的推导与变换,后续更新其他例题,陆续更新博客内容~
涉及前置知识点:线性筛求积性函数,整除分块,积性函数的性质,狄利克雷卷积
一、前置知识
0.初等数论基础
整除、质数、约数、算术基本定理,详见博客:数论学习笔记-初等数论基础
1.杜教筛解决什么问题?
解决积性函数求前缀和的问题,它可以在非线性时间内求积性函数前缀和。为什么要使用杜教筛?不能用线性筛筛积性函数吗?
答:线性筛只适用于1e8以下的求积性函数前缀和问题,因为复杂度是O(n),而当n>1e9时,就会超时,而杜教筛可以解决n = 1e11的积性函数求前缀和问题,杜教筛算法的时间复杂度是
O
(
n
2
3
)
O(n^\\frac 2 3)
O(n32)
2. 积性函数与线性筛求积性函数
积性函数:对于任意互质的整数 a,b有 f(a×b)=f(a)×f(b)的数论函数。
完全积性函数:对于任意整数 a,ba,b 有 f(a×b)=f(a)×f(b)的数论函数。
常见的积性函数:
μ
,
φ
,
ϵ
,
i
d
,
I
,
δ
,
d
μ
:
莫
比
乌
斯
函
数
φ
:
欧
拉
函
数
ϵ
:
单
位
元
函
数
i
d
:
单
位
函
数
I
:
恒
等
函
数
δ
:
约
数
和
函
数
d
:
约
数
个
数
函
数
,
也
叫
除
数
函
数
\\mu,\\varphi,\\epsilon,id,I,\\delta,d\\\\ \\mu:莫比乌斯函数\\\\ \\varphi:欧拉函数\\\\ \\epsilon:单位元函数\\\\ id:单位函数\\\\ I:恒等函数\\\\ \\delta:约数和函数\\\\ d:约数个数函数,也叫除数函数
μ,φ,ϵ,id,I,δ,dμ:莫比乌斯函数φ:欧拉函数ϵ:单位元函数id:单位函数I:恒等函数δ:约数和函数d:约数个数函数,也叫除数函数
线性筛求积性函数详见博客:数论学习笔记之积性函数与筛法求积性函数
3.狄利克雷卷积
狄利克雷卷积满足交换律和结合律
结合狄利克雷卷积得到的几个积性函数之间性质:
μ
∗
I
=
ϵ
∗
I
=
I
∗
I
=
d
φ
∗
I
=
i
d
∗
I
=
δ
\\mu*I = \\epsilon*I = I*I = d\\\\ \\varphi*I = id*I = \\delta
μ∗I=ϵ∗I=I∗I=dφ∗I=id∗I=δ
4.整除分块
详情见另一篇博客:整除分块笔记1
二、杜教筛
1.式子推导
这里给出杜教筛的式子推导:
令
h
=
f
∗
g
,
g
为
要
求
的
函
数
适
用
条
件
,
如
果
∑
i
=
1
n
h
(
i
)
好
求
,
∑
i
=
1
n
f
(
i
)
也
好
求
那
么
∑
i
=
1
n
g
(
i
)
就
好
求
。
令
H
(
n
)
=
∑
i
=
1
n
h
(
i
)
=
∑
i
=
1
n
(
f
∗
g
)
(
i
)
令
S
(
n
)
=
∑
i
=
1
n
g
(
i
)
(
1
)
根
据
迪
利
克
雷
卷
积
定
义
:
有
H
(
n
)
=
∑
i
=
1
n
(
f
∗
g
)
(
i
)
=
∑
i
=
1
n
∑
d
∣
i
f
(
d
)
g
(
i
d
)
=
∑
i
=
1
n
∑
d
=
1
n
f
(
d
)
g
(
i
d
)
[
d
∣
i
]
,
再
令
i
=
i
1
d
,
=
∑
d
=
1
n
∑
i
1
d
=
1
n
f
(
d
)
g
(
i
1
d
d
)
[
d
∣
i
1
d
]
=
∑
d
=
1
n
∑
i
1
d
=
1
n
f
(
d
)
g
(
i
1
)
=
∑
d
=
1
n
∑
i
=
1
n
d
f
(
d
)
g
(
i
)
=
∑
d
=
1
n
f
(
d
)
∑
i
=
1
n
d
g
(
i
)
=
∑
d
=
1
n
f
(
d
)
S
(
n
d
)
取
出
第
1
项
,
(
为
什
么
取
第
1
项
?
)
则
有
H
(
n
)
=
f
(
1
)
S
(
n
)
+
∑
d
=
2
n
f
(
d
)
S
(
n
d
)
f
(
1
)
S
(
n
)
=
H
(
n
)
−
∑
d
=
2
n
f
(
d
)
S
(
n
d
)
S
(
n
)
=
H
(
n
)
−
∑
d
=
2
n
f
(
d
)
S
(
n
d
)
f
(
1
)
这
里
S
(
n
)
就
得
到
了
,
后
面
的
式
子
可
以
整
除
分
块
求
。
\\beginaligned &令h = f*g,g为要求的函数\\\\ &适用条件,如果\\sum_i=1^nh(i)好求,\\sum_i=1^nf(i)也好求\\\\ &那么\\sum_i=1^ng(i)就好求。\\\\ &令H(n) = \\sum_i=1^nh(i) = \\sum_i=1^n(f*g)(i)\\\\ &令S(n) = \\sum_i=1^ng(i)\\\\ &(1)根据迪利克雷卷积定义:\\\\ &有H(n)=\\sum_i=1^n(f*g)(i)= \\sum_i=1^n\\sum_d|if(d)g(\\frac i d)\\\\ &=\\sum_i=1^n\\sum_d=1^nf(d)g(\\frac i d)[d|i],再令i = i_1d,\\\\ &=\\sum_d=1^n\\sum_i_1d=1^nf(d)g(\\frac i_1d d)[d|i_1d]\\\\ &=\\sum_d=1^n\\sum_i_1d=1^nf(d)g(i_1)\\\\ &=\\sum_d=1^n\\sum_i=1^\\frac n df(d)g(i)\\\\ &=\\sum_d=1^nf(d)\\sum_i=1^\\frac n dg(i)\\\\ &=\\sum_d=1^nf(d)S(\\frac n d)\\\\ &取出第1项,(为什么取第1项?)\\\\ &则有H(n) = f(1)S(n)+\\sum_d=2^nf(d)S(\\frac n d)\\\\ &f(1)S(n) = H(n)-\\sum_d=2^nf(d)S(\\frac n d)\\\\ &S(n) = \\frac H(n)-\\sum_d=2^nf(d)S(\\frac n d)f(1)\\\\ &这里S(n)就得到了,后面的式子可以整除分块求。 \\endaligned
令h=f∗g,g为要求的函数适用条件,如果i=1∑nh(i)好求,i=1∑nf(i)也好求那么i=1∑ng(i)就好求。令H(n)=i=1∑nh(i)=i=1∑n(f∗g)(i)令S(n)=i=1∑ng(i)(1)根据迪利克雷卷积定义:有H(n)=i=1∑n(f∗g)(i)=i=1∑nd∣i∑f(d)g(di)=i=1∑[日常摸鱼]杜教筛