本文仅供个人复习使用(因为截网站图了),这可能是博主第一篇质量文(bushi),别问问就是不到一个月选拔赛结果还啥都不会,cf分也才800分,有好多都做不了,因此想系统学一下,不管能不能出线,实在不行大三上继续来(谁让我大二上才来),个人宗旨是先学透知识才能运用知识
1.问题:我们想知道小于等于n有多少素数?
1.埃氏筛 O(nlognlogn)
不妨理解一下为什么从i的i倍开始,i-1倍及之前的呢,事实上,i的i-1倍,也就是i-1的i倍,早就筛过了,详见第四层5的四倍不复存在,5的3,2倍都有,从小到大是这么用的???
我记得我之前一直懊恼于范围就是你比如说2的2倍这个右边界就是4,那么很显然,只能说为了减少我们的时间复杂度,该有的都会有的。
按照上文看,埃氏筛就能理解了
时间复杂度不懂后续再补
2.线性筛 O(n)
可以看到第三层3的4倍与2的6倍重合了,这代表筛重了
解释是因为i之前被su[j]筛过,因为质数从小到大,如果说其他的质数*i(事实上我觉得它指的也是比su[j]大的质数,个人猜测)会被su[j]的倍数筛掉,就不需要提前先筛一次
举例:第五层,6为2所筛,没必要6的3,5倍,反正会有2的倍数会取走的,没必要再提前筛了
最近的应该是4,4被2所筛,4*3会被2*6筛掉,所以没必要4*3,小质数能取到的倍数我们就不花费大质数的倍数去取了,不然凭空增加复杂度,然后你说为什么不大质数开始取,感觉这不乱了嘛,只能说尽量减小复杂度,感觉这种就很精妙,就是应该从小开始的,才能不重不漏。
看见没,我说啥来着
3.筛法求欧拉函数
介绍一下欧拉函数(我也是刚学的)
欧拉函数的性质
第一个感觉积性函数性质,记就行我觉得,有时间讨论下奇数那个,现在光记
第二个当时没看到,后面补充
第三个减去的是p的倍数因为最大数是p的k次方/p,最小是1,所以直接取最大数
第四个由于积性函数性质可得,挺好证明的
正题:
上面能看懂的话这个能看懂应该,不过多解释了
4.筛法求莫比乌斯函数
(施工中...)