Euler 筛
Euler 筛可以 \(O(n)\) 筛出质数并预处理 \(\varphi\) 、\(\mu\) 等数论函数。
对于每个数 \(i\) 有如下操作:
- 判断是否是质数
- 把与当前算出的所有质数 \(p\) 乘积设为不是质数
- 如果 \([i \equiv 0 \mod{p_i}]\) 退出循环
为什么 \([i \equiv 0 \mod{p_i}]\) 退出循环 ?
如果 \([i \equiv 0 \mod{p_i}]\) , 那么,说明这个数已经被之前的某个数筛过了,为避免重复,退出循环。
预处理数论函数
Euler 筛也可以预处理 \(\varphi\) ,\(\mu\) 等数论函数。
- \(\varphi\)
-
- 若 \(i \mod{p} = 0\),则 \(\varphi(ip) = \varphi(i)p\)
- 若 \(i \mod{p} \neq 0\),则 \(\varphi(ip) = \varphi(i)(p-1)\)
- 若 \(i\) 为质数,则 \(\varphi(i) = i-1\)
- \(\mu\)
-
- 若 \(i \mod{p} = 0\),则 \(\mu(ip) = 0\)
- 若 \(i \mod{p} \neq 0\),则 \(\mu(ip) = -\mu(i)\)
- 若 \(i\) 为质数,则 \(\mu(i) = -1\)

浙公网安备 33010602011771号