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\)

posted @ 2025-07-11 23:37  fyv233  阅读(8)  评论(0)    收藏  举报