数论 - 筛法相关
埃氏筛
调和级数暴力枚举倍数。
应用:求给定数中 \(i\) 的因子个数(Dirichlet 前缀和),详见 容斥反演篇。
欧拉筛
- 优化:只筛 6k-1,6k+1
- https://www.luogu.com.cn/blog/310801/xiao-mo-xian-zhu-yi-0-post
- 对于所有 \(i\) 进行筛法枚举质数 \(j\) 时只枚举到 \(i\) 的最小质因子。
- 分类讨论:
- \(i\) 含有最小质因子 \(j\),\(i\times j\) 也含有最小质因子 \(j\)。
- \(i\) 不含最小质因子 \(j\),\(i\times j\) 含有最小质因子 \(j\)。
- 对两种情况分别更新。
- 可以筛 \(\mu,\varphi\)、最小约数、约数个数、约数和 等积性函数。
- 扩展到任意积性函数,只要可以 O(1) 求 \(f(p^k)\) 即可。
线性筛 \(n^n\)
\(n^n\) 可以在线性内预处理,我们套用线性筛的流程:
- 对于素数暴力快速幂,这一部分复杂度为 \(\Theta(\dfrac{n}{\ln n}\ln n)\)。
对于合数 \(i=pq\),\(p\) 是一 小于根号 的素数,而 \(q\) 是在外层枚举的任意数,我们尝试计算 \((p^p)^q(q^q)^p\),前者使用光速幂 \(\Theta(\sqrt n)\) 预处理 \(\Theta(1)\) 查询,后者即依次求出 \(C^{p_1},C^{p_2},\cdots\)。\(p_i-p_{i-1}\) 是 prime gap,其为 \(\Theta(\ln n)\) 级别,暴力预处理这一级别的幂次,那么复杂度为 \(\Theta(\sqrt n\times \sqrt n+\sum_q\ln \dfrac{n}{q})=\Theta(n)\)。