第 6 章 · 01 数论(对应 docs/math/number-theory/) 本节定位:对应 OI Wiki (共 33 篇,OI Wiki 最深的子目录)。难度:进阶到高阶。前置依赖:算法基础(第 2 章)、基本取模运算。本节是非难点导读节,把 33 篇按"工具 → 经典定理 → 省选级反演"分四层串起来,莫比乌斯反演和杜教筛是省选级难点但本节只做导读,深入请回 Wiki。 ⚠️ 注意:数论是 OI Wiki 内容最密集的部分,公式极多。本节只导航并点出"哪些必会、哪些是省选级",不重写 Wiki 的证明。读 Wiki 时建议按本节给出的顺序,不要跳。 知识地图 第一层:素数与筛法(必会,地基) 素数判定( ):试除法 O(√n),枚举到 √n 即可;
本节定位:对应 OI Wiki
docs/math/number-theory/(共 33 篇,OI Wiki 最深的子目录)。难度:进阶到高阶。前置依赖:算法基础(第 2 章)、基本取模运算。本节是非难点导读节,把 33 篇按"工具 → 经典定理 → 省选级反演"分四层串起来,莫比乌斯反演和杜教筛是省选级难点但本节只做导读,深入请回 Wiki。
⚠️ 注意:数论是 OI Wiki 内容最密集的部分,公式极多。本节只导航并点出"哪些必会、哪些是省选级",不重写 Wiki 的证明。读 Wiki 时建议按本节给出的顺序,不要跳。
docs/math/number-theory/prime.md):试除法 O(√n),枚举到 √n 即可;大数(如 10¹⁸)用 Miller-Rabin 概率判定(docs/math/number-theory/prime.md 同页后半),基于费马小思想,用若干个底数测试,准确率极高。docs/math/number-theory/sieve.md):O(n log log n),每个合数被它的质因子多次标记,实现简单但不够快。docs/math/number-theory/sieve.md):O(n),核心是"每个合数只被它的最小质因子筛一次"。线性筛是数论题的标配预处理,欧拉函数、莫比乌斯函数都能在筛的过程中顺手求出。docs/math/number-theory/prime.md):试除 O(√n);大数用 Pollard-Rho(docs/math/number-theory/pollard-rho.md),期望 O(n^(1/4))。💡 学习提示:线性筛是后续欧拉函数、莫比乌斯函数预处理的基础,必须能默写。关键是内层循环遇到
i % prime[j] == 0就 break,保证每个合数只被最小质因子筛掉。这段代码几乎每场数论题都要写。
docs/math/number-theory/euler.md):≤ n 且与 n 互质的个数。如 φ(6)=2(1、5)。φ 是积性函数(互质时 φ(ab)=φ(a)φ(b)),可在线性筛里顺手预处理。欧拉定理推广了费马:a^φ(m) ≡ 1 (mod m)(a、m 互质),是求逆元的更一般基础。docs/math/number-theory/fermat.md):p 为质数且 gcd(a,p)=1 时 a^(p-1) ≡ 1 (mod p)。这是求逆元(模质数)的工具,也是快速幂取模、Miller-Rabin 素性测试的理论基础。竞赛里 a^(p-2) mod p 求逆元就是直接用它。docs/math/number-theory/inverse.md):两条路——
a^(-1) ≡ a^(p-2) (mod p)(费马小定理 + 快速幂),O(log p)。docs/math/number-theory/euclidean.md)解 ax + by = gcd(a,b),得到 x 即逆元(要求 gcd(a,模数)=1)。inv[i] = -(p/i) * inv[p%i] mod p,O(n) 求出 1..n 所有逆元。docs/math/number-theory/crt.md):解模数两两互质的同余方程组,"孙子定理"。扩展 CRT(docs/math/number-theory/crt.md 后半)可处理模数不互质的情况(合并两个方程)。docs/math/number-theory/congruence-equation.md):一次同余方程用 exgcd;高次用 BSGS 等(进阶)。⚠️ 注意:竞赛里取模除法必须用逆元,不能直接除。求逆元优先用费马小定理(p 是质数时),不满足才用 exgcd。这两个模板都要能默写。批量逆元的递推公式也要记,n 大时单点费马会 TLE。
docs/math/number-theory/mobius.md):μ(n) 按质因子个数取值——n 有平方因子时 μ=0;否则质因子数为偶 μ=1,为奇 μ=-1。可在线性筛预处理。f(n) = Σ_{d|n} g(d),则 g(n) = Σ_{d|n} μ(d) f(n/d)。这是把"求和换序"的核心工具。竞赛里典型套路是:把含 gcd 的求和用莫比乌斯反演化简成整除求和。docs/math/number-theory/sqrt-decomposition.md):求 Σ floor(n/i) 这类和时(i 从 1 到 n),把 i 按"商相同"分成 O(√n) 块,每块整段求和,O(√n) 加速。是反演题计算答案的标准技巧。docs/math/number-theory/dirichlet.md):(f*g)(n) = Σ_{d|n} f(d) g(n/d),是莫比乌斯反演的代数基础。💡 学习提示:莫比乌斯反演是省选的"分水岭"。初学别贪多,先把"推式子 + 整除分块"练熟(典型题如求 Σ gcd(i,j)),再学复杂反演。推式子时记住几个常用结论(如 Σ_{d|n} μ(d) = [n==1])。
docs/math/number-theory/du.md):求数论函数前缀和 S(n) = Σf(i),复杂度 O(n^(2/3))。当 n 大到 10¹⁰(线性筛跑不动)时使用。(f*g) 的前缀和反推出 S(n),递归求解 + 预处理小范围(到 n^(2/3))+ 记忆化(用哈希表存已算过的 S)。docs/math/number-theory/min-25.md)、Powerful Number 筛,属于更进阶的求和工具。prime.md → sieve.md → euler.md → fermat.md → inverse.md → euclidean.md → crt.md → mobius.md → sqrt-decomposition.md → du.md。前 7 个是地基,后 3 个是高阶。💡 学习提示:数论是"公式多但模型少"的学科。把"线性筛 + 逆元 + 反演"这三类吃透,80% 的数论题都能套。不要追求把 33 篇全背下来,要建立"遇到什么题用什么工具"的索引。
a^(p-1) ≡ 1。docs/math/number-theory/ 各页。