【算法学习笔记】36:中国剩余定理(Chinese Remainder Theorem)求解线性同余方程组

server/2025/2/4 4:01:25/

中国剩余定理

假定存在 m 1 . . m k m_1..m_k m1..mk两两互质,中国剩余定理旨在求解这样的线性同余方程组中的 x x x
x ≡ a 1 ( m o d m 1 ) x ≡ a 2 ( m o d m 2 ) . . . x ≡ a k ( m o d m k ) x \equiv a_1~(mod~m_1) \\ x \equiv a_2~(mod~m_2) \\ ... \\ x \equiv a_k~(mod~m_k) xa1 (mod m1)xa2 (mod m2)...xak (mod mk)
定理给出的求解方式是,设:
M = ∏ i = 1 k m i M i = M m i M= \prod_{i=1}^{k}m_i \\ M_i = \frac{M}{m_i} M=i=1kmiMi=miM
易知 M i M_i Mi m i m_i mi互质。记 M i − 1 M_i^{-1} Mi1表示 M i M_i Mi m i m_i mi的逆,则定理给出的一个 x x x的解是:
x = ∑ i = 1 k a i ⋅ M i ⋅ M i − 1 x = \sum_{i=1}^{k}a_i \cdot M_i \cdot M_i^{-1} x=i=1kaiMiMi1

如何求 M i M_i Mi关于模 m i m_i mi的乘法逆元

前面学了快速幂求乘法逆元,但是要求模数是一个质数。但前面的线性同余方程组中只限制了不同的 m i m_i mi之间两两互质,并不要求 m i m_i mi是一个质数,所以可以用扩展欧几里得算法来求乘法逆元。

根据乘法逆元的定义:

若整数 b b b m m m互质,并且对于任意的整数 a a a,如果满足 b ∣ a b~|~a b  a,则存在一个整数 x x x,使得 a b ≡ a ⋅ x ( m o d m ) \frac{a}{b} \equiv a \cdot x(mod~m) baax(mod m),则称 x x x b b b的模 m m m乘法逆元,记为 b − 1 ( m o d m ) b^{-1}(mod~m) b1(mod m)

两边除以 a a a,再把 b b b乘到右边,就有:
b ⋅ x ≡ 1 ( m o d m ) b \cdot x \equiv 1~(mod~m) bx1 (mod m)

这正是一个特殊的线性同余方程,可以用扩展欧几里得算法求出 x x x

证明

只要证明中国剩余定理给出的解是满足线性同余方程组的一个合法解即可:
x = ∑ i = 1 k a i ⋅ M i ⋅ M i − 1 x = \sum_{i=1}^{k}a_i \cdot M_i \cdot M_i^{-1} x=i=1kaiMiMi1
只要对方程组中的每一条方程一个个带入校验即可。对于任意的第 i i i条方程, x x x m i m_i mi的结果必须是 a 1 a_1 a1

考虑到解中的第 i i i a i ⋅ M i ⋅ M i − 1 a_i \cdot M_i \cdot M_i^{-1} aiMiMi1 M i − 1 M_i^{-1} Mi1 M i M_i Mi m i m_i mi下的逆,因此它们的乘积 M i ⋅ M i − 1 M_i \cdot M_i^{-1} MiMi1 m i m_i mi一定余 1 1 1,进而这一项 a i ⋅ M i ⋅ M i − 1 a_i \cdot M_i \cdot M_i^{-1} aiMiMi1模上 m i m_i mi一定余 a i a_i ai

考虑到解中的第 j j j项( j ≠ i j \neq i j=i),由于 M j M_j Mj中一定包含了一个因子 m i m_i mi,所以这一项 a j ⋅ M j ⋅ M j − 1 a_j \cdot M_j \cdot M_j^{-1} ajMjMj1 m i m_i mi一定余 0 0 0

因此,所有项的加和模 m i m_i mi一定余 a i a_i ai,证毕。

例题:洛谷P1495 【模板】中国剩余定理(CRT)/ 曹冲养猪

模板题,注意中间结果可能会爆long long,所以要用__int128,由于是对 M i M_i Mi求逆,按照题目数据范围这个exgcdinv_rp的过程也要写成long long的。

#include <iostream>
#include <vector>using namespace std;typedef long long LL;LL exgcd(LL a, LL b, LL& x, LL& y) {if (!b) {x = 1, y = 0;return a;}LL d = exgcd(b, a % b, y, x);// by + (a % b)x = d// by + (a - a/b * b) * x = d// ax + by - (a/b) * b * x = d// ax + b(y - (a/b) * x) = dy -= a / b * x;return d;
}// b和m互质求b模m的逆
LL inv_rp(LL b, LL m) {// bx = 1 (% m)// bx = 1 + my// bx + my' = 1LL x, y;exgcd(b, m, x, y);return x;
}LL crt(vector<int>& a, vector<int>& m) {LL M = 1;int n = a.size();for (int i = 0; i < n; i ++ ) {M *= m[i];}__int128 res = 0;for (int i = 0; i < n; i ++ ) {LL Mi = M / m[i];res = (res + (__int128)a[i] * Mi * inv_rp(Mi, m[i])) % M;}return (res + M) % M;
}int main() {int n; cin >> n;vector<int> a(n), b(n);for (int i = 0; i < n; i ++ ) {cin >> a[i] >> b[i];}cout << crt(b, a) << endl;return 0;
}

http://www.ppmy.cn/server/164796.html

相关文章

【面经】字节南京一面部分题目记录

南京字节一面题&#xff0c;可能因为项目不太匹配&#xff0c;全程八股比较多&#xff0c;也有两道手撕代码题&#xff0c;强度还是有的。为了方便大家学习&#xff0c;大部分答案由GPT整理&#xff0c;有些题给出了我认为回答比较好的博客链接。 文章目录 一、python2 和 pyth…

C# 继承与多态详解

.NET学习资料 .NET学习资料 .NET学习资料 在 C# 面向对象编程中&#xff0c;继承与多态是两个极为关键的特性&#xff0c;它们赋予了程序强大的复用性和灵活性。理解并掌握这两个特性&#xff0c;是成为一名优秀 C# 开发者的必经之路。 一、C# 继承 1.1 继承的定义与概念 …

Pyside6(PyQT5)的QSqlQueryModel的常用方法

QSqlQueryModel 是 PySide6 中一个用于执行 SQL 查询并处理查询结果的模型类。它可以方便地将查询结果展示在视图组件中&#xff0c;如 QTableView 或 QListView。以下是 QSqlQueryModel 的一些常用方法&#xff1a; 1. setQuery(query, dbNone) 参数: query: SQL 查询字符串…

C++——list的了解和使用

目录 引言 forward_list与list 标准库中的list 一、list的常用接口 1.list的迭代器 2.list的初始化 3.list的容量操作 4.list的访问操作 5.list的修改操作 6.list的其他操作 二、list与vector的对比 结束语 引言 本篇博客要介绍的是STL中的list。 求点赞收藏评论…

Elasticsearch 指南 [8.17] | Search APIs

Search API 返回与请求中定义的查询匹配的搜索结果。 http GET /my-index-000001/_search Request GET /<target>/_search GET /_search POST /<target>/_search POST /_search Prerequisites 如果启用了 Elasticsearch 安全功能&#xff0c;针对目标数据流…

TikTok 推出了一款 IDE,用于快速构建 AI 应用

字节跳动(TikTok 的母公司)刚刚推出了一款名为 Trae 的新集成开发环境(IDE)。 Trae 基于 Visual Studio Code(VS Code)构建,继承了这个熟悉的平台,并加入了 AI 工具,帮助开发者更快、更轻松地构建应用——有时甚至无需编写任何代码。 如果你之前使用过 Cursor AI,T…

NLP模型大对比:Transformer >Seq2Seq > LSTM > RNN > n-gram

结论 Transformer 大于 传统的Seq2Seq 大于 LSTM 大于 RNN 大于 传统的n-gram n-gram VS Transformer 我们可以用一个 图书馆查询 的类比来解释它们的差异&#xff1a; 一、核心差异对比 维度n-gram 模型Transformer工作方式固定窗口的"近视观察员"全局关联的&q…

《DeepSeek手机版:开启AI移动新时代》

DeepSeek 手机版爆火&#xff1a;现象与背景 在当今数字化时代&#xff0c;AI 技术的发展日新月异&#xff0c;如同一股汹涌澎湃的浪潮&#xff0c;深刻地改变着我们的生活。而在这股浪潮中&#xff0c;DeepSeek 手机版宛如一颗璀璨的新星&#xff0c;迅速崛起&#xff0c;引发…