中国剩余定理

中国剩余定理及扩展中国剩余定理瞎讲(CRT&EXCRT)

孤街浪徒 提交于 2020-03-20 18:07:04
中国剩余定理(CRT) 怎么说 我听了三遍才懂emmm 再次感谢 wjh dalao 倾情讲解加手写演绎 这样一个同余方程组,要求一个x 使x满足以上所有条件,其中m1——mk互素 将m1到mk累乘 构造M = m1 * m2 * ... * mk 因为m互素,所以M为m的lcm 这样易得 M / mi ≡ 0 (mod mj) (i != j) 利用exgcd求出M / mi的逆元,使得 M / mi * ti ≡ 1 (mod mi) (不会exgcd指路这里——> 同余方程,exgcd (不会逆元指路这里——> 乘法逆元 我们知道在mod m意义下,两边同乘不干扰 所以将上式两边同乘ai ai * M / mi * ti ≡ ai (mod mi) 我们发现,这个式子的右边是原方程组的右边 那么左边就自然是x的值了 而x需要满足所有的同余方程 那么 特别的 (x % M + M) % M是最小整数解 两道模版题 luoguP3868猜数字 P1495曹冲养猪 放一段crt的核心代码 ll quickmul(ll n,ll k){ ll ans = 0; while(k > 0){ if(k & 1) ans = (ans + n) % M; n = (n + n) % M; k >>= 1; } return ans % M; }//猜数字中需要用到快速乘 void

【CRT】中国剩余定理简介

大憨熊 提交于 2020-03-20 17:36:49
中国剩余定理(CRT) 中国剩余定理出自中国的某本古书,似乎是孙子兵法?(雾 其中有这样一个问题: 有物不知其数,三三数之剩二,五五数之剩三,七七数之剩二。问物几何? 即,对于这样一个方程组: \[ \begin{cases}x\equiv a_1\pmod{m_1}\\x\equiv a_2\pmod{m_2}\\x\equiv a_3\pmod{m_3}\\\dots\\x\equiv a_i\pmod{m_i}\end{cases} \] 我们已知所有 \(a_i,m_i\) ,求可行解 \(x\) ,可以证明的是, 若所有 \(m_i\) 互质,那么该方程组有唯一解。 可以构造出一个解:如果有 \(k\) 个方程,设 \(M=\prod_{i=1}^k m_i,n_i=\frac{M}{m_i}\) ,则有 \(x=\sum_{i=1}^k a_in_in_i^{-1}\pmod{M}\) 。 扩展中国剩余定理(EXCRT) 扩展中国剩余定理不要求 \(m_i\) 互质,其结论是由数学归纳法得出的,跟CRT实际上没太大关系。这种情况下,方程组的解是不唯一的。 首先考虑两个方程的情况。 假设我们有 \(x\equiv a_1\pmod{m_1},x\equiv a_2\pmod{m_2}\) ,那么显然 \(x+m_1*t_1=a_1,x+m_2*t_2=a_2\) ,其中

【模板】扩展中国剩余定理(EXCRT)

那年仲夏 提交于 2020-03-20 17:32:16
洛咕 题意: \(\left\{\begin{aligned}x\equiv\ a_1(\mod b_1) \quad\\ x\equiv\ a_2(\mod b_2) \quad\\ x\equiv\ a_3(\mod b_3) \quad\\ ...\quad\\x\equiv\ a_n(\mod b_n) \quad\end{aligned}\right.\) 其中 \(b_1,b_2,b_3...b_n\) 不一定两两互质,求x的最小非负整数解. 分析:中国剩余定理中 \(b_1,b_2,b_3...b_n\) 保证了两两互质,而扩展中国剩余定理中没有,所以它们两个没有半毛钱关系.扩展中国剩余定理只需要用到 扩展欧几里得(广告) . 假设已经求出前k-1个方程组成的同余方程组的一个解为ans,且有 \(M=\prod_{i=1}^{k-1}b_i\) (这里理解为最小公倍数),则前k-1个方程构成的方程组的通解为 \(ans+p*M(p\in Z)\) 那么对于前k个方程构成的方程组,我们就是要求一个正整数q,使得 \(ans+q*M \equiv a_k(\mod b_k)\) . 移项得 \(q*M \equiv a_k-ans(\mod b_k)\) 如果你理解了扩展欧几里得算法的话,看到上面这个式子应该会感到很亲切. 我们令 \(c=a_k-ans\)

【学习笔记】中国剩余定理

江枫思渺然 提交于 2020-03-20 17:25:07
感觉之前写的太垃圾了,重新写一下。 没有那么多奇怪的介绍,直接开始吧。 设m1,m2,m3,m4....mk两两互素,则同余方程组 x≡a1(mod m1) x≡a2(mod m2) x≡a3(mod m3) x≡a4(mod m4) x≡ak(mod mk) 一定有解,x≡(a1*M1*M1^(-1)+a2*M2*M2^(-1)+....)(mod M) 其中M=m1*m2*m3*....mk,Mi=M/mi,Mi^(-1)是Mi在模mi意义下的逆元。 互素情况下的模板,是POJ1006代码 代码: #include<iostream> #include<cstring> #include<cstdio> using namespace std; int a[4],m[4]; int p,e,i,d,t=1; void exgcd(int a,int b,int &x,int &y){ if(b==0){ x=1;y=0; return; } exgcd(b,a%b,x,y); int t; t=x;x=y;y=t-a/b*y; } int CRT(int a[],int m[],int n){ int M=1,ans=0; for(int i=1;i<=n;i++)M*=m[i];//求出M for(int i=1;i<=n;i++){ int x,y; int Mi=M/m

拓展中国剩余定理

天涯浪子 提交于 2020-03-06 11:40:47
目录 目录地址 上一篇 下一篇 拓展中国剩余定理(exCRT) 给定 \(n\) 组整数 \(a_i,b_i\) 求解非负最小/某区间内的整数 \(x\) 使得 \(\begin{cases} x\equiv a_1(\mod b_1) \\\ \\ x\equiv a_2(\mod b_2) \\\ \\ x\equiv a_3(\mod b_3) \\\ \\ ...... \\\ \\ x\equiv a_n(\mod b_n) \end{cases}\) 数据保证有解 我们先考虑一个子问题: 如果已知 \(\begin{cases} x\equiv a_1(\mod b_1) \\\ \\ x\equiv a_2(\mod b_2) \end{cases}\) 那怎么表示所有满足条件的整数 \(x\) 呢? 由第一个方程可知: \(x=a_1+t\cdot b_1,t\in Z\) 因此,我们代入第二个方程: \(a_1+t\cdot b_1\equiv a_2(\mod b_2)\) 显然得到: \(t\cdot b_1\equiv a_2-a_1(\mod b_2)\) 由拓展欧几里得算法(exGCD)可以求解 \(tb_1+mb_2=a_2-a_1\) 的 \(t,m\) 因此,保证有解的情况下, \(t\) 一定是可求的 最后我们求出 \(x=a_1+t\cdot

中国剩余定理

六月ゝ 毕业季﹏ 提交于 2020-02-27 08:37:16
题目链接——表达整数的奇怪方式 #include <iostream> #include <cstdio> using namespace std; int line; typedef long long LL; LL exgcd(LL a, LL b, LL & x, LL & y) { if(b == 0) { x = 1, y = 0; return a; } LL d = exgcd(b, a % b, y, x); y -= a / b * x; return d; } inline LL mod(LL a, LL b) { return (a % b + b) % b; } int main() { cin >> line; LL a1, m1, k1; scanf("%lld%lld", &a1, &m1); bool flag = true; LL a2, m2, k2; for (int i = 1; i < line; i ++) { scanf("%lld%lld", &a2, &m2); LL d = exgcd(a1, -a2, k1, k2); if((m2 - m1) % d) { flag = false; continue; } k1 *= (m2 - m1) / d; m1 = mod(k1, a2 / d) * a1 + m1; a1 =

中国剩余定理

时光毁灭记忆、已成空白 提交于 2020-02-07 19:43:52
中国剩余定理 当 \(m_1,m_2,\cdots,m_n\) 两两互质时,解方程组 \[ \begin{cases} x&\equiv a_1\pmod{m_1} \\ x&\equiv a_2\pmod{m_2} \\ &\vdots \\ x&\equiv a_n\pmod{m_n} \end{cases} \] 令 \(M=\prod m_i\) ,令 \(M_i=\frac{M}{M_i}\) ; 方程组最小解: \(x_0=\sum (M_i^{-1}\bmod{m_i})M_ia_i\pmod{M}\) ; 解集: \(\{x_0+kM:k\in\mathbb Z\}\) 。 证明:带入 \(x_0\) 成立且周期为 \(M\) 。 扩展中国剩余定理 解方程组 \[ \begin{cases} x\equiv a_1\pmod {m_1} \\ x\equiv a_2\pmod {m_2} \end{cases} \] 扩展欧几里得算法 合并即可。 Problem 解方程: \[ \begin{cases} b_1x&\equiv a_1\pmod{m_1} \\ b_2x&\equiv a_2\pmod{m_2} \\ &\vdots \\ b_nx&\equiv a_n\pmod{m_n} \\ \end{cases} \] 考虑合并 \[ \begin

[学习笔记]中国剩余定理

て烟熏妆下的殇ゞ 提交于 2020-01-30 10:32:02
中国剩余定理 以前公式用的是图片导致排版丑陋,今天复习顺便重写了 描述 有同余方程组: \[ \left\{ \begin{matrix} x \equiv a_1 (mod \ m_1) \\ x \equiv a_2 (mod \ m_2) \\ ... \\ x \equiv a_k (mod \ m_k) \end{matrix} \right. \\ 其中m_i两两互质 \] 令 \(M = \prod_{i = 1}^{k} m_i\) ,则方程组的一个解为 \(x = \sum_{i = 1}^{k} a_i \cdot \frac{M}{m_i} \cdot (\frac{M}{m_i})^{-1}\) ,其中 \((\frac{M}{m_i})^{-1}\) 表示 \(\frac{M}{m_i}\) 模 \(m_i\) 意义下的逆元 如果求最小非负整数解,再模 \(M\) 即可 证明 对于每一个 \(x \equiv a_i (mod \ m_i)\) ,记解为 \(x_i\) ,则有 \(x_i + m_i \cdot y = a_i\) ,两边除以 \(a_i\) ,得: \[ \frac{x_i}{a_i} + \frac{m_i \cdot y}{a_i} = 1 \tag{1} \] 由 \(m_i\) 两两互质得 \(\frac{M}{m_i}\) 与

中国剩余定理

一个人想着一个人 提交于 2020-01-26 15:33:43
中国剩余定理 对于一组同余方程, \(m_{1},m_{2}...m_{n}两两互质\) \[ \left\{\begin{array}{l}{x \equiv a_{1}\left(\bmod m_{1}\right)} \\{x \equiv a_{2}\left(\bmod m_{2}\right)} \\{\cdots} \\{x \equiv a_{n}\left(\bmod m_{n}\right)}\end{array}\right. \] 有整数解。并且在模 \(M = m_{1}*m_{2}..m_{n}\) 下的解是唯一的,解为 \[ \boldsymbol{x} \equiv\left(\boldsymbol{a}_{1} M_{1} M_{1}^{-1}+a_{2} M_{2} M_{2}^{-1}+\ldots+a_{k} M_{k} M_{k}^{-1}\right) \bmod M \] 其中 \(M_{i} = \frac{M}{m_{i}},M^{-1}_{i}\) 为 \(M_{i}\) 模 \(m_{i}\) 的逆元 #include <iostream> #include <cstdio> #define ll long long using namespace std; const int maxn = 1e5 + 5; void ex

中国剩余定理 $CRT$

為{幸葍}努か 提交于 2020-01-24 20:23:17
考虑一个同余方程组 \[ \begin{cases}x \equiv a_1 \ (mod \ b_1) \\x \equiv a_2 \ (mod \ b_2) \\\quad \quad \quad \vdots \\x \equiv a_n \ (mod \ b_n) \end{cases} \] 其中 \(b_1,b_2,\dots,b_n\) 两两互质。 令 \(m = \prod\limits_{i = 1}^n b_i\) , \(M_i = \frac{m}{b_i}\) , \(t_i\) 是同余方程 \(xM_i \equiv 1 \ (mod \ b_i)\) 的一个解 那么上面那个方程组的解为 \(\sum\limits_{i = 1}^{n} a_i M_i t_i\) 。 证明: 考虑 \(\sum\) 中的一项 \(i\) ,对于 \(k = i\) 显然有 \(a_i M_i t_i \equiv a_k \ (mod \ b_k)\) ,若 \(k \not = i\) ,则 \(a_i M_i t_i \equiv 0 \ (mod \ b_k)\) (因为 \(M_i\) 是其他 \(b\) 的乘积)。 所以上面 \(\Sigma\) 中的 \(n\) 项各会满足一个方程,且不会对其他有影响,故 \(x = \sum\limits_{i = 1