素数筛法
Eratosthenes 筛法
大致上就是从
2
开始往后扫,找到一个未被筛的(素)数以后将它在
时间复杂度
O(nloglogn)
,空间复杂度
O(n)
Euler 筛法
这个算法的精妙之处在于每一个合数只会被它最小的素因子筛去,它对枚举的每一个数都尝试乘上一个质数,将构出的合数筛去。
考虑合数
n=pm=p′m′
,其中
p
是它最小的素因子,
综上,
Euler
筛法的时间、空间复杂度都是
O(n)
Möbius函数的线性筛法
由于 μ 函数是一个积性函数,而且它的性质比较特殊,我们只需要在欧拉筛的过程中讨论一下就可以了。
实际上只要能快速算出 f(pk) ,配合素数线筛就可以线性或者带个 log 地筛出积性函数的值。