杜教筛 学习小结
2017-07-13 09:22
281 查看
今年的GDKOI居然考了反演,还要用杜教筛,狠狠的把我骇了一跳,
回来在51nod上随便点开几题看起来像是反演的题,发现都是要用杜教筛(这RP~),
好吧好吧,那就学杜教筛咯~
有几个大家都很熟悉的式子:
∑d|nμ(d)=[n=1]
根据这个,再写出一个式子:
∑i=1n∑d|iμ(d)=1
∑i=1n∑j=1⌊ni⌋μ(j)=1
那么:
∑i=1nμ(i)=1−∑i=2n∑j=1⌊ni⌋μ(j)
于是μ的前缀和就可以求了,
其他就是乘了一些奇怪的数也差不多是这样化(见后文)。
记得加上哈希记忆化。
其实并不用哈希,
我们发现,因为我们预处理了至少n√个,
所以我们要算的所有的数都是小于n√的,
当我们在计算n的答案时,在计算过程中所要访问的所有数x,它的n/x的值都是唯一的,
所以我们就直接用n/x作为它的哈希值,
计算下一个答案时再清空即可,
关于狄利克雷卷积的先挖坑(逃)
杜教筛的复杂度:O(n23)
然而我并不会证明QwQ
转载唐老师的博客
【51nod 1244】莫比乌斯函数之和
求:
∑i=abμ(i)
这个直接求出1~b的减去1~(a-1)的即可。
例题里面会有杜教筛其他情况的详细讲解(按难度排序)
【51nod 1239】欧拉函数之和
【BZOJ 3944】Sum(双倍经验)
【51nod 1237】最大公约数之和 V3
【51nod 1238】最小公倍数之和 V3
【51NOD 1227】平均最小公倍数(双倍经验)
回来在51nod上随便点开几题看起来像是反演的题,发现都是要用杜教筛(这RP~),
好吧好吧,那就学杜教筛咯~
杜教筛的套路
有几个大家都很熟悉的式子: ∑d|nμ(d)=[n=1]
根据这个,再写出一个式子:
∑i=1n∑d|iμ(d)=1
∑i=1n∑j=1⌊ni⌋μ(j)=1
那么:
∑i=1nμ(i)=1−∑i=2n∑j=1⌊ni⌋μ(j)
于是μ的前缀和就可以求了,
其他就是乘了一些奇怪的数也差不多是这样化(见后文)。
记得加上哈希记忆化。
其实并不用哈希,
我们发现,因为我们预处理了至少n√个,
所以我们要算的所有的数都是小于n√的,
当我们在计算n的答案时,在计算过程中所要访问的所有数x,它的n/x的值都是唯一的,
所以我们就直接用n/x作为它的哈希值,
计算下一个答案时再清空即可,
关于狄利克雷卷积的先挖坑(逃)
复杂度
杜教筛的复杂度:O(n23) 然而我并不会证明QwQ
转载唐老师的博客
【51nod 1244】莫比乌斯函数之和
求:
∑i=abμ(i)
这个直接求出1~b的减去1~(a-1)的即可。
其他例题
例题里面会有杜教筛其他情况的详细讲解(按难度排序) 【51nod 1239】欧拉函数之和
【BZOJ 3944】Sum(双倍经验)
【51nod 1237】最大公约数之和 V3
【51nod 1238】最小公倍数之和 V3
【51NOD 1227】平均最小公倍数(双倍经验)
相关文章推荐
- Page 的生命周期学习小结(翻译兼笔记)
- 协议学习小结之二 —— 利用多种协议实现路由跟踪 TraceRoute
- Dev-C++下基本数据类型学习小结
- Page 的生命周期学习小结
- 学习阶段小结
- Page 的生命周期学习小结
- [持续更新] 学习历程 迭代计划和小结
- 民航学概论学习小结
- vi编辑器的学习使用(小结)
- 学习jsp中的一些小结
- 学习C++小结
- 近期学习小结(2005-2-13)
- 学习小结(2005-2-22)
- STL学习小结(原创:桑英硕 )
- VBA学习小结
- 近期学习工作小结
- ARP协议学习小结——协议简介和图形化工具SendARP
- MFC学习小结
- Dev-C++下基本数据类型学习小结
- linux 2.6 内核学习小结(1)---硬件相关概念