中国剩余定理(CRT) & 扩展中国剩余定理(ExCRT)总结 标签:数学方法--数论 阅读体验:https://zybuluo.com/Junlier/note/1300035 前置浅讲 前置知识点:\(Exgcd\) 这两个东西都是用来解同余方程组的 形如 \[ \left\{ \begin{aligned} x\equiv B_1(mod\ W_1)\\ x\equiv B_2(mod\ W_2)\\ \cdots\\ x\equiv B_n(mod\ W_n)\\ \end{aligne…
原文链接https://www.cnblogs.com/zhouzhendong/p/exCRT.html 扩展中国剩余定理 (exCRT) 的证明与练习 问题模型 给定同余方程组 $$\begin{cases}x&\equiv&x_1&\pmod {p_1}\\x&\equiv&x_2&\pmod {p_2}\\ &&\vdots\\x&\equiv&x_n&\pmod {p_n}\end{cases}$$ 求解 $…
扩展中国剩余定理 (ExCRT) 学习笔记 预姿势: 扩展中国剩余定理和中国剩余定理半毛钱关系都没有 问题: 求解线性同余方程组: \[ f(n)=\begin{cases} x\equiv a_1\pmod {m_1}\\ x\equiv a_2\pmod {m_2}\\ ... ...\\ x\equiv a_n\pmod {m_n}\\ \end{cases}\] 的解\(x\). \(m\)两两之间不一定互质! 解法: ExCRT的基本思想是将方程两两合并,合并规则如下: 定义 \[in…
问题 传送门 看到这个问题感觉很难??? 不用怕,往下看就好啦 假如你不会CRT也没关系 EXCRT大致思路 先考虑将方程组两两联立解开,如先解第一个与第二个,再用第一个与第二个的通解来解第三个...(以此类推) 那么怎么解第一个与第二个同余方程呢? \[\begin{cases} x \equiv a_1 \pmod{b_1}\\ x \equiv a_2 \pmod{b_2}\\ . . . \end{cases} \] 则存在整数(注意不是非负),使得 \[\begin{cases} x…
前言 由于 \(\{\mathrm{CRT}\}\subseteq\{\mathrm{exCRT}\}\),而且 CRT 又太抽象了,所以直接学 exCRT 了. 摘自 huyufeifei 博客 这么抽象的东西我怎么可能会写 前置技能 gcd/lcm exgcd 快速乘 参考资料 一篇未通过的洛谷日报 by AH_ljq 比较直观的 exCRT 学习笔记 by Milky Way 我之前写过的 exgcd 学习笔记 huyufeifei 对 CRT 的劝退 用途 用于求一个关于 \(x​\)…
题面 传送门:洛咕 Solution 真*扩展中国剩余定理模板题.我怎么老是在做模板题啊 但是这题与之前不同的是不得不写龟速乘了. 还有两个重点 我们在求LCM的时候,记得先/gcd再去乘另外那个数,直接乘会乘爆的 我们在做龟速乘之前,要保证要乘的两个数>=0,如果<0的话,龟速乘会爆掉的,我们传进去之间记得膜一下 int128:你说啥?这里风太大,我听不见. Code //Luogu P4777 [模板]扩展中国剩余定理(EXCRT) //Jan,15th,2019 //中国剩余定理 #in…
P4777 [模板]扩展中国剩余定理(EXCRT) excrt模板 我们知道,crt无法处理模数不两两互质的情况 然鹅excrt可以 设当前解到第 i 个方程 设$M=\prod_{j=1}^{i-1}b[j]$ ,$ res$是前$ i-1 $个方程的最小解 则$ res+x*M$ 是前 $i-1 $个方程的通解 那么我们求的就是 $res+x*M ≡ a[i] (mod b[i])$ $<=> x*M - y*b[i] = a[i]-res$ 用exgcd求出的解为 t (当且仅当 gcd…
EXCRT 不保证模数互质 \[\begin{cases} x \equiv b_1\ ({\rm mod}\ a_1) \\ x\equiv b_2\ ({\rm mod}\ a_2) \\ ... \\ x \equiv b_n\ ({\rm mod}\ a_n)\end{cases}\] CRT戳这里 来一手数学归纳法 设已经求出前 \(k - 1\) 组的一个解 \(q\) 设 \(M = \prod_{i = 1}^{k - 1}a_{i}\) 我们知道前 \(k - 1\) 组的通解…
思路 中国剩余定理解决的是这样的问题 求x满足 \[ \begin{matrix}x \equiv a_1(mod\ m_1)\\x\equiv a_2(mod\ m_2)\\ \dots\\x\equiv a_n(mod\ m_n)\end{matrix} \] 在模数互质的情况下,解为 \[ x=\sum_ia_iM_iM_i^{-1}(mod M) \] 其中\(M=\prod_{i}m_i\),\(M_i=\frac{M}{m_i}\),\(M_i^{-1}\)为\(M_i\)在模\(m…
扩展中国剩余定理(EXCRT)学习笔记 用途 求解同余方程组 \(\begin{cases}x\equiv c_{1}\left( mod\ m_{1}\right) \\ x\equiv c_{2}\left( mod\ m_{2}\right) \\ \ldots \\ x\equiv c_r\left( mod\ m_r\right) \end{cases}\) 其中 \(m_1,m_2,m_3...m_k\) 为不一定两两互质的整数, 求 \(x\) 的最小非负整数解. 求法 考虑两两合…
1.欧几里得算法(辗转相除法) 直接上gcd和lcm代码. int gcd(int x,int y){ ?x:gcd(y,x%y); } int lcm(int x,int y){ return x*y/gcd(x,y); } 2.扩欧:exgcd:对于a,b,一定存在整数对(x,y)使ax+by=gcd(a,b)=d ,且a,b互质时,d=1. x,y可递归地求得. 我懒得改返回值类型了 long long exgcd(long long a,long long b,long long &x,…
题目链接:http://poj.org/problem?id=2891 题目大意: 求解同余方程组,不保证模数互质 题解: 扩展中国剩余定理板子题 #include<algorithm> #include<cstring> #include<cstdio> #include<iostream> #include<cmath> using namespace std; typedef long long ll; +; int k; ll m[N],…
数论守门员二号 =.= 中国剩余定理: 1.一次同余方程组: 一次同余方程组是指形如x≡ai(mod mi) (i=1,2,…,k)的同余方程构成的组 中国剩余定理的主要用途是解一次同余方程组,其中m1,m2,...,mk互质 2.中国剩余定理: 令M=m1*m2*...*mk(即所有m的lcm)ti为同余方程M/mi*ti≡1(mod mi)的最小正整数解 则存在解x=∑ai*M/mi*ti 通解为x+i*M 最小非负整数解为(x%M+M)%M (我承认这段是抄的orz 原文看起来更方便:ht…
链接: https://www.acwing.com/problem/content/206/ 题意: 给定2n个整数a1,a2,-,an和m1,m2,-,mn,求一个最小的非负整数x,满足∀i∈[1,n],x≡mi(mod ai). 思路: 扩展中国剩余定理模板题. 代码: #include <bits/stdc++.h> using namespace std; typedef long long LL; LL R[50], M[50]; int n; LL ExGcd(LL a, LL…
题意:求解一般模线性同余方程组 解题关键:扩展中国剩余定理求解.两两求解. $\left\{ {\begin{array}{*{20}{l}}{x = {r_1}\,\bmod \,{m_1}}\\{x = {r_2}\,\bmod \,{m_2}}\end{array}} \right.$ 为了代码的符号清晰,将转化后的系数都为正,故如下设方程. $\left\{ {\begin{array}{*{20}{l}}{x = {r_1} - {k_1}{m_1}}\\{x = {r_2} + {k…
0.引子 每一个讲中国剩余定理的人,都会从孙子的一道例题讲起 有物不知其数,三三数之剩二,五五数之剩三,七七数之剩二.问物几何? 1.中国剩余定理 引子里的例题实际上是求一个最小的x满足 关键是,其中r1,r2,--,rk互质 这种问题都有多解,每一个解都为最小的解加上若干个lcm(r1,r2,...,rk),这个不用我证了吧(-_-||) 解决这个问题的方法是构造法, 先构造k个数 满足, 这样就保证 ,但是由于 bi 乘了除 ri 以外所有 r,所以bi模其它的 r 都为 0, 再把所有 b…
前言 我们熟知的中国剩余定理,在使用条件上其实是很苛刻的,要求模线性方程组\(x\equiv c(\mod m)\)的模数两两互质. 于是就有了扩展中国剩余定理,其实现方法大概是通过扩展欧几里德把两个同余方程合并,具体会在下面提到. 但是,使用仍有限制,那就是\(x\)的系数必须为\(1\). 没关系,把它再扩展一下 题目及实现 洛谷题目传送门 题意分析 显然,如果我们能干掉所有龙,那么每一次使用的剑的攻击力是已知的,设为\(k\).那么对于每一条龙,攻击次数\(x\)必须满足\(kx\equi…
扩展中国剩余定理板子 #include<iostream> #include<cstdio> using namespace std; const int N=100005; int n; long long m[N],r[N],M,R,x,y,d; void exgcd(long long a,long long b,long long &d,long long &x,long long &y) { if(!b) { d=a,x=1,y=0; return…
扩展中国剩余定理的板子,合并完之后算一下范围内能取几个值即可(记得去掉0) #include<iostream> #include<cstdio> #include<cmath> using namespace std; const int N=15; int T,n,m; long long a[N],b[N],A,B,x,y,d; bool fl; void exgcd(long long a,long long b,long long &d,long lo…
Han Xin and His Troops(扩展中国剩余定理 Python版) 题目来源:2019牛客暑期多校训练营(第十场) D - Han Xin and His Troops 题意:   看标题就知道大概了,韩信点兵的典故我们应该都熟悉吧.   给出 \(n\) 个同余方程,问是否存在不超过 \(m\) 的正整数解.   坑点:   数据比较大,直接用 CRT 会爆 ll,这时候就用 Python 来实现.   AC代码: n = 110 # 同余方程个数 a = [0]*110 # 余…
传送门 解题思路 扩展 $crt​$,就是中国剩余定理在模数不互质的情况下,首先对于方程 ​     $\begin{cases} x\equiv a_1\mod m_1\\x\equiv a_2\mod m_2\end{cases}$ 来说,可以将其写为: $\begin{cases} x=k_1*m_1+a_1\\x=k_2*m_2+a_2\end{cases}$ 然后联立方程: ​     $k_1*m_1+a_1=k_2*m_2+a_2$ $\Leftrightarrow -k_1*m_…
注意一下:: 题目是 \[x≡b_i\pmod {a_i}\] 我总是习惯性的把a和b交换位置,调了好久没调出来,\(qwq\). 本题解是按照 \[x≡a_i\pmod {b_i}\] 讲述的,请注意 本题\(m_i\)不一定两两互质,所以中国剩余定理在本题不再适用. 说是扩展中国剩余定理,其实好像和中国剩余定理关系不大. 使用数学归纳法,如果我们已经知道了前\(k-1\)个方程组构成的一个解,记作\(x\),记\(m=\Pi_{i=1}^{k-1}m_i\),则\(x+i*m(i∈Z)\)是…
(扩展)中国剩余定理 对于一组同余方程 \(x\equiv a_1(mod \quad n_1)\) \(x\equiv a_2(mod \quad n_2)\) \(x\equiv a_3(mod \ \ n_3)\) \(x\equiv a_n(mod\ \ n_m)\) 对于第一个和第二个式子 则有: \(x = a1 + k1*n1\) \(x = a2 + k2*n2\) 就有: \(a1 + k1 * n1 = a2 + k2 * n2\) \(k1 * n1 - k2 * n2 =…
今天在$xsy$上翻题翻到了一道扩展CRT的题,就顺便重温了下(扩展CRT模板也在里面) 中国剩余定理是用于求一个最小的$x$,满足$x\equiv c_i \pmod{m_i}$. 正常的$CRT$有一个微小的要求,就是$\forall i,j (m_i,m_j)=1$. 在某些情况下,这个式子无法被满足,这个时候就要用扩展$CRT$来求解了. 我们先假设我们只有两条方程要被求解,它们分别是: $\begin{cases} x\equiv c_1 \pmod{m_1}\\x\equiv c_2…
题目大意 就是模板...没啥好说的 思路 因为模数不互质,所以直接中国剩余定理肯定是不对的 然后就考虑怎么合并两个同余方程 \(ans = a_1 + x_1 * m_1 = a_2 + x_2 * m_2\) \(x_1 * m_1 + x_2 * m_2 = a _ 2 - a _ 1\)(因为正负号没影响嘛) 然后就可以exgcd解出来\(x_1, x_2\), 最后就可以得到\(x' = a_1 + x_1 * m_1, m' = lcm(m_1, m_2)\) 然后就不停合并就可以了…
扩展中国剩余定理,EXCRT. 题目传送门 重温一下中国剩余定理. 中国剩余定理常被用来解线性同余方程组: x≡a[1] (mod m[1]) x≡a[2] (mod m[2]) ...... x≡a[n] (mod m[n]) 但是中国剩余定理只能解决m[1].m[2]......m[n]两两互质的情况. 对于m[1].m[2]......m[n]不两两互质的情况,我们需要用其它的方法解决. 假设我们已经处理到了第i个方程,设ans为前i-1个方程的解,ms为m[1]*m[2]*...*m[i…
题目链接 [VJ传送门] 题目描述 给你\(a_1...a_n\)和\(m_1...m_n\),求一个最小的正整数\(x\),满足\(\forall i\in[1,n] \equiv a_i(mod \ mi)\). 分析 很显然,中国剩余定理无法解决\(m_i\)之间非互质的问题. 需要用\(exCRT\). 假设\(x\)是前\(k-1\)个方程推出来的答案,那么第一个方程可以直接得出自己的答案就是\(a_1\). 设\(M=lcm(m_1,m_2...m_{k-1})\),那么显然得到\(…
好久没写了,写一篇凑个数. 题目分析: 这题不难想,讲一下中国剩余定理怎么扩展. 考虑$$\left\{\begin{matrix}x \equiv a\pmod{b}\\ x \equiv c\pmod{d}\end{matrix}\right.$$ 不难发现需要满足$gcd(b,d)|(c-a)$才有解. 结合后的模数一定是$lcm(b,d)$.然后扩展gcd合并就行了. 中间过程会超过$10^18$,需要快速乘. 代码: #include<bits/stdc++.h> using nam…
题目链接 https://www.luogu.org/problemnew/show/P4777 分析 扩展\(CRT\)就是解决模数不互质的情况,说是扩展\(CRT\),其实都是扩欧... 先来考虑两个方程的情况:\(x \equiv a \mod b\)和\(x \equiv c \mod d\) 由方程1得\(x=tb+a\),代入方程2中得\(tb+a \equiv c \mod d\), 把它变得更像方程:\(t \times b+t' \times d = c-a\) 解得\(t'\…
LINK:P5410 模板 扩展 KMP Z 函数 画了10min学习了一下. 不算很难 思想就是利用前面的最长匹配来更新后面的东西. 复杂度是线性的 如果不要求线性可能直接上SA更舒服一点? 不管了 反正这个知识点填过了.. code //#include<bits/stdc++.h> #include<iostream> #include<cstdio> #include<ctime> #include<cctype> #include<…