当前位置:首页 > 技术 > 正文内容

算法竞赛进阶数论核心定理与算法解析

访客 技术 2026年9月7日 2

同余理论与剩余系

在数论中,同余是研究整数除法余数性质的核心工具。若存在整数 \(n_1, n_2, m\)(其中 \(m > 0\)),使得 \(n_1\) 和 \(n_2\) 除以 \(m\) 的余数相同,即 \(n_1 = mq_1 + r\) 且 \(n_2 = mq_2 + r\),则称 \(n_1\) 与 \(n_2\) 对模 \(m\) 同余,记作 \(n_1 \equiv n_2 \pmod m\)。

基于同余关系,可以将整数集划分为若干个等价类。所有模 \(m\) 同余于 \(r\) 的整数构成的集合称为模 \(m\) 的一个剩余类,记为 \(C_r\)。若从模 \(m\) 的 \(m\) 个不同剩余类中各选取一个代表元,这 \(m\) 个整数构成的集合称为模 \(m\) 的完全剩余系

进一步地,若在完全剩余系中仅保留与 \(m\) 互质的元素,所构成的集合称为模 \(m\) 的简化剩余系(或缩系)。根据欧拉函数的定义,简化剩余系的元素个数严格等于 \(\varphi(m)\)。

欧几里得算法与裴蜀定理

最大公约数与辗转相除法

欧几里得算法(辗转相除法)基于以下恒等式计算最大公约数:

\[\gcd(a,b) = \gcd(b, a \bmod b)\]

证明:设 \(a = qb + r\),其中 \(r = a \bmod b\)。若 \(d = \gcd(b, r)\),则 \(d \mid b\) 且 \(d \mid r\)。由于 \(a = qb + r\),必然有 \(d \mid a\),因此 \(d\) 是 \(a\) 和 \(b\) 的公约数,即 \(d \mid \gcd(a, b)\)。反之,若 \(k = \gcd(a, b)\),则 \(k \mid a\) 且 \(k \mid b\),从而 \(k \mid (a - qb) = r\),即 \(k \mid \gcd(b, r)\)。两者互相整除,故 \(\gcd(a, b) = \gcd(b, a \bmod b)\)。

裴蜀定理 (Bézout's Identity)

对于不全为零的整数 \(a, b\) 和任意整数 \(m\),线性丢番图方程 \(ax + by = m\) 存在整数解 \((x, y)\) 的充要条件是 \(\gcd(a, b) \mid m\)。若存在一组解,则必然存在无穷多组解。

证明与构造:必要性由整除的线性性质易得。充分性可通过扩展欧几里得算法构造证明。我们只需证明 \(ax + by = \gcd(a, b)\) 有解。在辗转相除的最后一步,有 \(\gcd(u, v) = \gcd(v, 1) = 1\),此时显然有 \(0 \cdot v + 1 \cdot 1 = 1\)。通过逆向回代,假设已知 \(u x_0 + v y_0 = 1\),且上一级状态为 \(\gcd(\lambda v + u, v)\),则可构造新解 \(x_1 = y_0\),\(y_1 = x_0 - \lambda y_0\),逐层回推即可得到原方程的解。

利用数学归纳法,裴蜀定理可自然推广至 \(n\) 个变量:方程 \(\sum_{i=1}^n a_i x_i = m\) 有整数解当且仅当 \(\gcd(a_1, a_2, \dots, a_n) \mid m\)。

以下是扩展欧几里得算法的标准实现,用于求解 \(ux + vy = \gcd(u, v)\):

long long extended_gcd(long long u, long long v, long long &coeff_u, long long &coeff_v) {
    if (v == 0) {
        coeff_u = 1;
        coeff_v = 0;
        return u;
    }
    long long gcd_val = extended_gcd(v, u % v, coeff_v, coeff_u);
    coeff_v -= (u / v) * coeff_u;
    return gcd_val;
}

欧拉定理与费马小定理

欧拉定理

若 \(\gcd(a, m) = 1\),则 \(a^{\varphi(m)} \equiv 1 \pmod m\)。

证明:设模 \(m\) 的一个简化剩余系为 \(r_1, r_2, \dots, r_{\varphi(m)}\)。由于 \(\gcd(a, m) = 1\),集合 \(\{a r_1, a r_2, \dots, a r_{\varphi(m)}\}\) 在模 \(m\) 意义下两两不同余,且均与 \(m\) 互质,因此它也是模 \(m\) 的一个简化剩余系。将两个集合的元素分别相乘,得到:

\[\prod_{i=1}^{\varphi(m)} r_i \equiv \prod_{i=1}^{\varphi(m)} (a r_i) \equiv a^{\varphi(m)} \prod_{i=1}^{\varphi(m)} r_i \pmod m\]

由于 \(\prod r_i\) 与 \(m\) 互质,两边约去该乘积即得 \(a^{\varphi(m)} \equiv 1 \pmod m\)。

费马小定理

当模数 \(m\) 为素数 \(p\) 时,\(\varphi(p) = p - 1\),欧拉定理退化为费马小定理:若 \(p\) 为素数且 \(\gcd(a, p) = 1\),则 \(a^{p-1} \equiv 1 \pmod p\),等价于 \(a^p \equiv a \pmod p\)。

扩展欧拉定理

在算法竞赛中,处理大指数模运算时,常使用扩展欧拉定理进行降幂:

\[a^b \equiv \begin{cases} a^{b \bmod \varphi(m)} & \gcd(a,m)=1 \\ a^b & \gcd(a,m) \neq 1, b < \varphi(m) \\ a^{b \bmod \varphi(m) + \varphi(m)} & \gcd(a,m) \neq 1, b \ge \varphi(m) \end{cases} \pmod m \]

证明思路:对 \(m\) 进行质因数分解 \(m = p_1^{\alpha_1} \dots p_k^{\alpha_k}\),只需对每个 \(p^\alpha\) 证明成立,再利用中国剩余定理合并。对于 \(\gcd(a, p^\alpha) \neq 1\) 的情况,必有 \(p \mid a\)。当 \(b \ge \varphi(m)\) 时,指数 \(b\) 足够大,使得 \(a^b\) 中包含的 \(p\) 的幂次大于等于 \(\alpha\),此时 \(a^b \equiv 0 \pmod{p^\alpha}\),而 \(a^{b \bmod \varphi(m) + \varphi(m)}\) 同样满足该条件,故两者同余。

乘法逆元

在模 \(m\) 意义下,若存在整数 \(b\) 使得 \(a \cdot b \equiv 1 \pmod m\),则称 \(b\) 为 \(a\) 的乘法逆元,记作 \(a^{-1} \pmod m\)。逆元存在的充要条件是 \(\gcd(a, m) = 1\)。

求解方法

  1. 扩展欧几里得算法:求解方程 \(ax + my = 1\),得到的 \(x\) 即为逆元。
  2. 欧拉定理/快速幂:由 \(a^{\varphi(m)} \equiv 1 \pmod m\),可得 \(a^{-1} \equiv a^{\varphi(m)-1} \pmod m\)。当 \(m\) 为素数时,退化为 \(a^{p-2} \pmod p\)。
  3. 线性递推:用于求解 \(1\) 到 \(n\) 所有整数的逆元。时间复杂度 \(O(n)\)。
std::vector<long long> compute_inverses(int max_val, long long mod) {
    std::vector<long long> inv(max_val + 1, 0);
    inv[1] = 1;
    for (int i = 2; i <= max_val; ++i) {
        inv[i] = (mod - (mod / i) * inv[mod % i] % mod) % mod;
    }
    return inv;
}

前缀积法求任意序列逆元

若需计算任意 \(n\) 个数 \(a_1, a_2, \dots, a_n\) 的逆元,可先计算前缀积 \(s_i = \prod_{j=1}^i a_j\)。利用上述方法求出 \(s_n^{-1}\) 后,倒序遍历计算 \(s_{i-1}^{-1} = s_i^{-1} \cdot a_i\),最后正序遍历得到 \(a_i^{-1} = s_i^{-1} \cdot s_{i-1}\)。该方法仅需一次求逆操作,时间复杂度为严格的 \(O(n)\)。

中国剩余定理 (CRT) 与扩展 (EXCRT)

中国剩余定理

对于同余方程组 \(x \equiv a_i \pmod{m_i}\),若模数 \(m_1, m_2, \dots, m_n\) 两两互质,令 \(M = \prod m_i\),\(M_i = M / m_i\),并求出 \(M_i\) 模 \(m_i\) 的逆元 \(M_i^{-1}\),则方程组在模 \(M\) 意义下的唯一解为:

\[x \equiv \sum_{i=1}^n a_i M_i M_i^{-1} \pmod M\]

扩展中国剩余定理 (EXCRT)

当模数不满足两两互质条件时,需使用 EXCRT。核心思想是逐个合并方程。考虑合并两个方程:

\[\begin{cases} x \equiv a \pmod m \\ x \equiv b \pmod n \end{cases}\]

将其转化为不定方程 \(\lambda m - \mu n = b - a\)。利用扩展欧几里得算法判断是否有解(需满足 \(\gcd(m, n) \mid (b - a)\)),并求出一组特解 \(\lambda_0\)。合并后的新方程为:

\[x \equiv m \lambda_0 + a \pmod{\text{lcm}(m, n)}\]

通过不断两两合并,最终可将整个方程组化简为单一同余方程。

威尔逊定理 (Wilson's Theorem)

对于任意素数 \(p\),满足 \((p-1)! \equiv -1 \pmod p\)。

证明:在集合 \(\{1, 2, \dots, p-1\}\) 中,每个元素均与 \(p\) 互质,故都存在唯一的乘法逆元。解方程 \(x^2 \equiv 1 \pmod p\),在 \(1 \le x \le p-1\) 范围内仅有 \(x = 1\) 和 \(x = p-1\) 两个解,即只有 \(1\) 和 \(p-1\) 的逆元是自身。其余元素均可与其逆元两两配对,乘积模 \(p\) 为 \(1\)。因此,\((p-1)! \equiv 1 \times (p-1) \times 1^{\frac{p-3}{2}} \equiv p-1 \equiv -1 \pmod p\)。

卢卡斯定理 (Lucas' Theorem)

对于素数 \(p\) 和非负整数 \(n, m\),组合数模 \(p\) 满足以下递推关系:

\[\binom{n}{m} \equiv \binom{n \bmod p}{m \bmod p} \times \binom{\lfloor n/p \rfloor}{\lfloor m/p \rfloor} \pmod p\]

直观解释:将 \(n\) 和 \(m\) 表示为 \(p\) 进制数,\(\binom{n}{m} \bmod p\) 的值等于 \(n\) 和 \(m\) 在 \(p\) 进制下对应数位上的组合数模 \(p\) 的乘积。该定理极大地优化了大组合数对小素数取模的计算效率。

相关文章

富文本里可以允许的 HTML 属性

一、所有标签默认允许的安全属性(极少)class        (可选)id           (通常建议禁用)title️ 注意:id 容易被滥用做锚点注入,很多系统直接禁用class 允许的话最好只允许固定前缀(如 editor-*)二、a 标签允许属性<a href="" t...

Mac 安装 Node.js 指南

方法一:通过官网安装包(最简单,适合初学者)如果你只是想快速安装并开始使用,这是最直接的方法。访问 Node.js 官网。页面会显示两个版本:LTS (Recommended For Most Users):长期支持版,最稳定。建议选这个。Current:最新特性版,包含最新功能但可能不够稳定。下载 .pkg 安装包并运行。按照安装向导点击“下一步”即可完成。方法二:使用 Homebrew 安装(...

Dom\HTML_NO_DEFAULT_NS 的副作用:自动加闭合标签

在使用Dom\HTMLDocument时,Dom\HTML_NO_DEFAULT_NS 将禁止在解析过程中设置元素的命名空间, 此设置是为了与DOMDocument向后兼容而存在的。当使用它时,已知的一个副作用就是:自动加闭合标签例如 </img> 为什么会这样?当你使用:Dom\HTML_NO_DEFAULT_NS文档会变成 无命名空间模式,此时内部更接近 XML...

Laravel 事件和监听器创建

在 Laravel 中,使用 Artisan 命令创建 Events(事件) 和 Listeners(监听器) 是非常高效的。你可以通过以下几种方式来实现:1. 手动创建单个 Event如果你只想创建一个事件类,可以使用 make:event 命令:Bashphp artisan make:event UserRegistered执行后,文件将生成在 app/Even...

自定义域名解析神器 dnsmasq

什么是 dnsmasq?dnsmasq 是一个轻量级、功能强大的网络服务工具,专为小型和中等规模网络设计。它是一个综合的网络基础设施解决方案[1]。dnsmasq 能做什么?功能说明应用场景DNS 转发与缓存将 DNS 查询转发到上游服务器(ISP、Google DNS 等),并在本地缓存结果加快 DNS 查询速度,减少外部 DNS 流量本地 DNS解析本地网络设备的主机名,无需编辑&n...

linux screen 用法详情 (nohup 的替代方案)

一、screen 是什么?能干嘛?screen 是一个终端复用器,可以:在一个 SSH 会话中开多个“虚拟终端”SSH 断线后,程序仍然在后台运行随时重新连接到原来的会话特别适合:nohup 的替代方案跑脚本 / 爬虫 / 训练模型运维、远程开发二、安装 screen# CentOS / Rocky / Almayum install -y screen# Debian / Ubuntuapt i...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。