数论&数学

一、基础数论

1.1 整除理论

基本概念

  • 整除\(a|b\) 表示存在整数 \(c\) 使得 \(b=ac\)
  • 约数与倍数:如果 \(a|b\),则 \(a\)\(b\) 的约数,\(b\)\(a\) 的倍数
  • 质数(素数):大于1且只能被1和自身整除的正整数
  • 合数:大于1且不是质数的正整数

质数判定

判断一个数 \(n\) 是否为质数,最基本的算法是试除法,时间复杂度 \(O(\sqrt{n})\)。可以通过只检查到 \(\sqrt{n}\) 和跳过偶数进行优化。

质因数分解

将正整数 \(n\) 分解质因数,输出所有质因数及其指数。基于试除法,每次找到一个质因子就除尽,时间复杂度 \(O(\sqrt{n})\)

1.2 同余理论

基本概念

  • 同余\(a \equiv b \pmod{m}\) 表示 \(m\) 整除 \(a-b\)
  • 模运算性质
    • \((a + b) \bmod m = (a \bmod m + b \bmod m) \bmod m\)
    • \((a - b) \bmod m = (a \bmod m - b \bmod m + m) \bmod m\)
    • \((a \times b) \bmod m = (a \bmod m \times b \bmod m) \bmod m\)
  • 逆元:如果 \(a \times b \equiv 1 \pmod{m}\),则 \(b\)\(a\) 在模 \(m\) 下的逆元

快速幂(模意义下)

计算 \(a^b \bmod m\),使用二分思想,时间复杂度 \(O(\log b)\)。通过将指数 \(b\) 的二进制分解,将幂运算转化为多次平方和乘法。

求逆元

给定 \(a\) 和质数 \(p\),求 \(a\) 在模 \(p\) 下的逆元。常用方法有:

  1. 费马小定理:当 \(p\) 为质数时,\(a^{p-2} \equiv a^{-1} \pmod{p}\)
  2. 扩展欧几里得算法:解 \(ax + py = 1\),得到的 \(x\) 就是 \(a\) 在模 \(p\) 下的逆元

1.3 最大公约数与最小公倍数

基本概念

  • 最大公约数(GCD)\(\gcd(a,b)\) 表示 \(a\)\(b\) 的最大公约数
  • 最小公倍数(LCM)\(\operatorname{lcm}(a,b) = a \times b / \gcd(a,b)\)
  • 欧几里得算法\(\gcd(a,b) = \gcd(b, a \bmod b)\)

欧几里得算法

求两个数的最大公约数,基于辗转相除原理,递归或迭代实现。扩展欧几里得算法可以求出 \(ax + by = \gcd(a,b)\) 的一组整数解。

1.4 素数筛法

埃拉托斯特尼筛法

筛选出 \(1 \sim n\) 中的所有素数,时间复杂度 \(O(n \log \log n)\)。从 \(2\) 开始,标记每个素数的倍数,剩余未标记的就是素数。

欧拉筛法(线性筛)

线性时间复杂度筛选素数,时间复杂度 \(O(n)\)。每个合数只被它的最小质因子筛掉一次,避免重复标记。

区间筛法

筛选区间 \([a,b]\) 内的所有素数,其中 \(b-a \leq 10^6\)\(b \leq 10^{12}\)。先用普通筛法筛选出 \(\sqrt{b}\) 以内的素数,然后用这些素数去标记区间内的合数。


二、同余方程

2.1 线性同余方程

求解线性同余方程

求解 \(ax \equiv b \pmod{m}\)。使用扩展欧几里得算法求出 \(ax + my = g\) 的解,其中 \(g = \gcd(a,m)\)。当 \(g|b\) 时,方程有解,解数为 \(g\) 个。

2.2 中国剩余定理

中国剩余定理

求解同余方程组 \(x \equiv a_i \pmod{m_i}\),其中模数两两互质。通过构造解 \(x = \sum (a_i \times M_i \times \operatorname{inv}(M_i, m_i))\),其中 \(M = \prod m_i\)\(M_i = M/m_i\)

扩展中国剩余定理

模数不一定互质的情况。通过合并方程逐步求解,使用扩展欧几里得算法解线性同余方程。

2.3 二次剩余

二次剩余判定

判断 \(a\) 是否是模 \(p\) 的二次剩余(\(p\) 为奇素数)。使用欧拉准则:\(a\) 是模 \(p\) 二次剩余当且仅当 \(a^{(p-1)/2} \equiv 1 \pmod{p}\)

Cipolla算法

求解 \(x^2 \equiv n \pmod{p}\)。随机选择 \(a\) 使得 \(a^2-n\) 不是二次剩余,然后在复数域中计算 \((a + \sqrt{a^2-n})^{(p+1)/2}\),实部即为解。


三、数论函数

3.1 积性函数

常见积性函数

  • 欧拉函数 \(\varphi(n)\)\(1 \sim n\) 中与 \(n\) 互质的数的个数
  • 莫比乌斯函数 \(\mu(n)\)
  • 约数个数函数 \(d(n)\)
  • 约数和函数 \(\sigma(n)\)

欧拉函数

计算欧拉函数值,单个计算可以使用质因数分解公式,批量计算可以使用线性筛。

约数个数与约数和

计算 \(1 \sim n\) 中每个数的约数个数和约数和,可以使用线性筛在线性时间内完成。

3.2 莫比乌斯反演

莫比乌斯函数

计算莫比乌斯函数 \(\mu(n)\)。定义:\(\mu(1)=1\);若 \(n\) 有平方因子则 \(\mu(n)=0\);否则 \(\mu(n)=(-1)^k\),其中 \(k\)\(n\) 的不同质因子个数。

莫比乌斯反演公式

\(F(n) = \sum_{d|n} f(d)\),则 \(f(n) = \sum_{d|n} \mu(d) F(n/d)\)。用于求解包含 \(\gcd\) 的求和问题。

3.3 杜教筛

杜教筛求前缀和

\(\sum_{i=1}^n \varphi(i)\)\(\sum_{i=1}^n \mu(i)\) 等积性函数前缀和。结合线性筛预处理前 \(N\) 项(通常 \(N=n^{2/3}\)),剩余部分使用递归和记忆化。


四、组合数学

4.1 基本计数原理

加法原理与乘法原理

计数问题的基本工具。加法原理用于分类计数,乘法原理用于分步计数。

路径计数

从网格左上角到右下角,只能向右或向下走,求路径数。可以使用组合数公式 \(C(m+n-2, m-1)\) 或动态规划。

4.2 排列组合

组合数计算

计算组合数 \(C(n,k)\)。方法有:

  1. 递推公式 \(C(n,k)=C(n-1,k-1)+C(n-1,k)\)
  2. 公式法 \(C(n,k)=n!/(k!(n-k)!)\)
  3. 模质数下的组合数(使用逆元)

卡特兰数

卡特兰数 \(C_n = C(2n,n)/(n+1)\)。出现在许多组合计数问题中,如括号匹配、出栈序列、二叉树计数等。

4.3 生成函数

普通生成函数

将计数问题转化为多项式系数问题。例如,用1元、2元、5元纸币支付 \(n\) 元的方法数对应的生成函数为 \(1/[(1-x)(1-x^2)(1-x^5)]\)

指数生成函数

用于排列计数问题。\(n\) 个元素的排列,其中元素 \(i\)\(a_i\) 个,排列数为 \(n!/(a_1!a_2!\cdots a_k!)\)

4.4 容斥原理

容斥原理应用

\(1 \sim n\) 中不能被 \(a_1,a_2,\dots,a_m\) 整除的数的个数。通过计算能被至少一个 \(a_i\) 整除的数,用容斥原理求解。

错排问题

\(n\) 个元素的排列,每个元素都不在原来位置的排列数。公式:\(D_n = (n-1)(D_{n-1}+D_{n-2})\),也可以用容斥原理 \(D_n = n! \sum_{i=0}^n (-1)^i/i!\)


五、线性代数

5.1 矩阵快速幂

斐波那契数列

求第 \(n\) 个斐波那契数,\(n \leq 10^{18}\)。使用矩阵快速幂,将线性递推转化为矩阵幂运算。

矩阵快速幂模板

通用矩阵快速幂模板,用于求解线性递推关系、图论中的路径计数等。

5.2 高斯消元

高斯消元解线性方程组

求解 \(n\) 元线性方程组。通过行变换将增广矩阵化为行阶梯形,然后回代求解。支持实数解和判断无解、无穷多解。

异或方程组

求解模 \(2\) 意义下的线性方程组。使用高斯消元,通过异或操作进行行变换。

5.3 线性基

线性基模板

处理向量空间的一组基,常用于求解最大异或和、判断数能否由集合异或得到、求第 \(k\) 小异或值等。

线性基应用

求子集异或和第 \(k\) 小、求最大异或和等。线性基可以将原集合转化为一组线性无关的向量,简化问题。


六、多项式与生成函数

6.1 FFT/NTT

快速傅里叶变换(FFT)

多项式乘法的高效算法,时间复杂度 \(O(n \log n)\)。将系数表示转化为点值表示,相乘后再转化回来。

快速数论变换(NTT)

模意义下的FFT,使用原根代替复数单位根。常用模数 \(998244353\),原根 \(3\)

6.2 多项式运算

多项式求逆

\(B(x)\) 使得 \(A(x)B(x) \equiv 1 \pmod{x^n}\)。使用牛顿迭代法,从低位到高位逐步求解。

多项式开根

\(B(x)\) 使得 \(B(x)^2 \equiv A(x) \pmod{x^n}\)。使用牛顿迭代法,结合多项式求逆。


七、博弈论

7.1 Nim游戏

Nim游戏

\(n\) 堆石子,每堆有 \(a_i\) 个,两人轮流取,每次可以从任意一堆中取任意多个,无法操作者输。先手必胜当且仅当所有石子数的异或和不为 \(0\)

阶梯Nim游戏

\(n\) 级阶梯,每级有 \(a_i\) 个石子,每次可以将任意级阶梯的任意多个石子移到下一级。只考虑奇数级台阶的石子数的异或和,不为 \(0\) 则先手必胜。

7.2 SG函数

SG函数模板

计算有向无环图游戏的SG值。定义 \(\operatorname{mex}\) 运算为最小的未出现的非负整数,状态 \(x\) 的SG值为 \(\operatorname{mex}\{\operatorname{SG}(y)|x \to y\}\)

取石子游戏

有一堆石子,每次可以取 \(1\) 个、\(2\) 个或 \(3\) 个。通过计算SG值发现,\(\operatorname{SG}(n) = n \bmod 4\),所以 \(n \bmod 4 \neq 0\) 时先手必胜。

巴什博弈

有一堆 \(n\) 个石子,每次最多取 \(m\) 个。先手必胜当且仅当 \(n \bmod (m+1) \neq 0\)

威佐夫博弈

有两堆石子,每次可以取一堆中的任意个,或者从两堆中取相同数量的石子。先手必败当且仅当 \((a,b)\) 是奇异局势,其中 \(a_k = \lfloor k \times \varphi \rfloor\), \(b_k = a_k + k\), \(\varphi = (1+\sqrt{5})/2\)


八、计算几何

8.1 基本运算

向量运算

向量的点积、叉积、长度、距离、旋转等基本运算。点积用于判断角度,叉积用于判断方向和面积。

几何判断

判断三点是否共线、点是否在线段上、两线段是否相交、多边形面积、点是否在多边形内等。

8.2 凸包

凸包算法(Andrew算法)

求点集的凸包。按坐标排序后,分别求上下凸壳,使用叉积判断是否向左转。

旋转卡壳求凸包直径

求凸包上最远点对。使用一对平行线"卡住"凸包,旋转求最大距离。

8.3 旋转卡壳

求凸包最小面积外接矩形

使用旋转卡壳,维护四个方向的极值点,旋转过程中计算矩形面积的最小值。


总结

本文详细介绍了OI中常见的数论与数学问题的分类和理论,涵盖了基础数论、同余方程、数论函数、组合数学、线性代数、多项式、博弈论和计算几何等多个领域。每个部分都介绍了基本概念、重要定理和典型算法。

学习建议:

  1. 掌握基础算法和数据结构
  2. 理解数学原理和推导过程
  3. 多刷题练习,提高代码实现能力
  4. 学会分析问题,选择合适的算法
  5. 注意边界条件和特殊情况处理

希望这份资料对你在OI竞赛中的数论和数学问题学习有所帮助!

posted @ 2026-01-11 20:18  Chestify  阅读(18)  评论(0)    收藏  举报