首页 > 其他分享 >中国剩余定理(CRT)

中国剩余定理(CRT)

时间:2024-08-11 20:23:36浏览次数:10  
标签:剩余 方程 CRT 方程组 定理 long 解为 逆元 式子

引出

        在《孙子算经》中有这样一个问题:

        “今有物不知其数,三三数之剩二,五五数之剩三,七七数之剩二,问物几何?”

也就是说有如下的方程组:

\begin{cases} x\ mod\ 3\ =\ 2\\ x\ mod\ 5\ = \ 3\\ x\ mod\ 7\ = \ 2 \end{cases}  \Rightarrow \begin{cases} x\equiv 2\ (mod\ 3)\\ x\equiv 3\ (mod\ 5)\\ x\equiv 2\ (mod\ 7) \end{cases}     求该方程组的解

x_0为最小整数解:

则   x_0 = x + k*(lcm(3,5,7)) = (x_0\ mod\ 105+105)\ mod\ 105

令  x = 2x_1+3x_2+2x_3 ,且

\begin{cases} x_1 \ mod\ 3 = 1\\ x_1\ mod\ 5 = 0\\ x_1\ mod\ 7 = 0 \end{cases} \begin{cases} x_2 \ mod\ 3 = 0\\ x_2\ mod\ 5 = 1\\ x_2\ mod\ 7 = 0 \end{cases} \begin{cases} x_3 \ mod\ 3 = 0\\ x_3\ mod\ 5 = 0\\ x_3\ mod\ 7 = 1 \end{cases}

通过取模得0的几个式子可以得到其最小公倍数

x_1 = 35k,\ k=2 \rightarrow x_1\ mod\ 3 = 1\rightarrow x_1=70

x_2 = 21k,\ k=1 \rightarrow x_2\ mod\ 5 = 1\rightarrow x_2=21

x_3 = 15k,\ k=1 \rightarrow x_3\ mod\ 7 = 1\rightarrow x_3=15

上述均可化为  ak\equiv 1(mod\ b) 的形式求逆元

x = 2*70 + 3*21+2*15=233

x_0= (233\ mod\ 105+105)\ mod\ 105 = 23

中国剩余定理

用于求解以下式子,其中 b_i 两两互质:

\begin{cases} x \equiv a_1\ (mod\ b_1)\\ x \equiv a_2\ (mod\ b_2)\\ ......\\ x \equiv a_n\ (mod\ b_n) \end{cases}

过程:

计算所有 b 的乘积 B

对于第i个式子:

  • 前i-1个式子的解为ans
  • 计算 m_i = \frac{B}{b_i} 以及 m_i 在模 b_i 意义下的逆元 m_i^{-1}
  • 前i个式子的解为  ans +a_im_im_i^{-1}\ (mod\ B)

最终解为  x = \sum_{i=1}^{n}a_im_im_i^{-1}(mod\ B)

证明:

对于所有的 m_i ,必定有  \sum_{j=1}^{n}[i\neq j]  个 b_j 为 m_i 的因子,即  m_i\ \equiv 0\ (mod\ b_j)

反过来说对于 b_j 只有 m_j 不为其倍数

根据  x = \sum_{i=1}^{n}a_im_im_i^{-1}(mod\ B),则有  x\equiv \sum_{i=1}^{n}a_im_im_i^{-1}(mod\ b_j)

在 i\neq j 时 m_i 皆为 b_j 的倍数, 所以  x \equiv a_jm_jm_j^{-1}(mod\ b_j)

 m_j^{-1} 是 m_j 模 b_j 意义下的逆元,化简 x \equiv a_j(mod\ b_j),可证得同余方程组解的正确性

一般需要用到龟速乘来确保不会溢出:

long long CRT()
{
	long long ans = 0;
	long long m = 1;
	for(int i = 1;i <= n;i++)
	{
		m *= b[i];
	}
	for(int i = 1;i <= n;i++)
	{
		long long mi = m / b[i];
		exgcd(mi,b[i]);
		x = (x % b[i] + b[i]) % b[i];
		ans = (ans + slow_mul(mi,x*a[i],m) % m + m) % m;
	}
	return (ans % m + m) % m;
}

扩展中国剩余定理

同样对于以下式子,其中 b_i 不保证互质:

\begin{cases} x \equiv a_1\ (mod\ b_1)\\ x \equiv a_2\ (mod\ b_2)\\ ......\\ x \equiv a_n\ (mod\ b_n) \end{cases}

过程:

  • 对于前i-1个式子,假设已求得答案x_{i-1},对于第1个式子有 x_1 = a_1
  • 令 m = lcm(b_1...b_{i-1}) ,则前i-1个式子通解为 x_{i-1} + km
  • 第i个方程的解既要满足第i个方程也要满足前i-1个方程,则 x_i = x_{i-1} + km
  • 将该式代入第i个方程求解 x_{i-1}+km\equiv a_i\ (mod\ b_i)
  • 转化一下式子: km \equiv a_i-x_{i-1}\ (mod\ b_i) ,可以用exgcd求解k
  • 将解得的k带回 x_i = x_{i-1} + km 可得到前i个方程的解

重复该步骤即可求得n组方程的解x

long long EXCRT()
{
	long long res = a[1];
	long long m = b[1];
	for(int i = 2;i <= n;i++)
	{
		long long A = m;
		long long B = b[i];
		long long C = (a[i] - res + B) % B;
		exgcd(A,B);
		x = slow_mul(x,C/__gcd(A,B),B);
		res += x*m;
		m = lcm(m,B);
		res = (res%m + m) % m;
	}
	return res;
}

注意有些题目可能有无解的情况,判断exgcd有无解即可

标签:剩余,方程,CRT,方程组,定理,long,解为,逆元,式子
From: https://blog.csdn.net/qq_74908899/article/details/141033894

相关文章

  • JavaScript 中 arguments 对象与剩余参数的对比及转换
    引言在JavaScript中,处理函数调用时传递的不同数量的参数是一项常见的任务。为此,JavaScript提供了两种不同的方法:arguments对象和剩余参数(RestParameters)。本文将探讨这两种方法的区别,并介绍如何将arguments对象转换为真正的数组。arguments对象vs.剩余参数arguments......
  • 初等数论定理
    中国剩余定理对于线性同余方程组:\(\begin{cases} x\equiva_1&\modm_1\\ x\equiva_2&\modm_2\\ \ldots\\ x\equiva_n&\modm_n\end{cases}\)(\(m_1,m_2,\ldots,m_n\)两两互质)令\(M=m_1\timesm_2\times\ldots\timesm_n\)令......
  • 矩阵树定理学习笔记
    用来求和一个图的生成树个数相关的算法,时间复杂度\(O(n^3)\)。你要会求一个矩阵的行列式,这是和行列式有关的前置知识。定理阐述对于无向图定义度数矩阵\(D_{i,j}=[i=j]\deg_i\),其中\(\deg_i\)表示\(i\)的度数。定义邻接矩阵为\(E_{i,j}\)为边\((i,j)\)的个数。定......
  • 二项式定理+二项式反演
    序(感谢9G对本博客证明的大力支持)前置知识1:排列组合2:多步容斥\[\dbinom{n}{m}=\binom{n}{n-m}=\mathrm{C}_n^m=\mathrm{C}_n^{n-m}\]\[\dbinom{n}{m}*\binom{m}{s}=\dbinom{n}{s}*\binom{n-s}{n-m}\]\[\dbinom{n}{x-1}+\binom{n}{x}=\dbinom{n+1}{x}\]证明:\(\dbinom{n}{x......
  • Luogu P3959 宝藏 题解 [ 紫 ] [ 状压 dp ] [ 二项式定理 ]
    宝藏:一个对着蓝书代码调都能调两个小时的大毒瘤,但是思路还是很值得借鉴的,有普通状压和三进制状压两种做法,或者暴搜剪枝也可以(这里不介绍暴搜剪枝做法)。普通状压做法观察到\(n\le12\),首先想到状压。但考虑到普通的状压不太行,因为\(K\)这个数算在代价里,会导致这个dp有后效......
  • BZOJ2839/LG10596 集合计数 题解(二项式反演+扩展欧拉定理)
    题目大意:一个有\(N\)个元素的集合有\(2^N\)个不同子集(包含空集),现在要在这\(2^N\)个集合中取出若干集合(至少一个),使得它们的交集的元素个数为\(K\),求取法的方案数,答案模\(10^9+7\)。为表述方便,不妨设这\(i\)个元素分别为\(1\simn\)。前置知识:二项式反演。考虑设\(g(......
  • 容斥定理及二项式反演
    二项式定理:\[(a+b)^n=\sum_{i=0}^{n}\binom{n}{i}a^ib^{n-i}\]很好理解。我们经常会使用的式子:\[(1+x)^n=\sum_{i=0}^{n}x^i\binom{n}{i}\]容斥定理:\[\begin{split}\left|\bigcup_{i=1}^{n}S_i\right|=&\sum_{i}|S_i|-\sum_{i<j}|S_i\capS_j|+\sum_{i<j&......
  • 锂电池剩余寿命预测 | Matlab基于Transformer-LSTM的锂电池剩余寿命预测
    目录预测效果基本介绍程序设计参考资料预测效果基本介绍Matlab基于Transformer-LSTM的锂电池剩余寿命预测,Transformer结合长短期记忆神经网络。Matlab基于Transformer-LSTM的锂电池剩余寿命预测(单变量)运行环境Matlab2023b及以上。首先从NASA数据集中提......
  • SCI一区级-python实现VMD-CNN-Transformer锂离子电池剩余寿命预测
    1. 基本介绍使用VMD结合皮尔逊相关系数实现对锂离子电池数据集去噪,消除数据中“容量再生问题”使用CNN-Transformer实现特征提取:利用卷积神经网络(CNN)进行特征提取。然后,利用改进的变压器模型来捕获时间序列中的固有相关性,并将其特征映射到未来的SOH值。采用迭代策略对每个......
  • hall 定理学习笔记
    万恶之源基本定义完美匹配是指最大匹配数为min(|X|,|Y|)也就是X或Y集合其中一个集合所有点都被匹配了。定理内容我们来假设X集合点少一点好了。X集合就当做有n个点。那么二分图G存在完美匹配,则取任意正整数1<=k<=n,均满足我从X集合选出k个不同的点,那么它们连向的y集合的点个......