1.中国剩余定理又指孙子定理。叙述如下:
令m1,…,mr两两互素, b1,…,br为整数, x≡b1(mod m1),x≡b2(mod m2)……x≡br(mod mr);有唯一正整数解x,其形式为:x=∑biMi’Mi(mod M)(1<=i<=r)
M=∏mi(1<=i<=r) ;Mi=M(mod mi);MiMi’ ≡1(mod mi);
符号定义完了。下面开始证明。
我们需要证明两个问题。
(1)x是方程组的解(负数+M取模为正就好)。
(2)x是唯一解。
先看第一个问题。
定理的前提是m1~mr均是质数,所以gcd(mi,mj)=1(i≠j)。gcd(Mi,mi)=1;
bjMj’Mj≡0(mod mi)(i≠j) 【gcd(Mj,mi)=mi;】
b1M1’M1+b2M2’M2+b3M3’M3+…+brMr’Mr≡biMi’Mi≡bi(mod mi)
可推出x是方程组的解。(1)得证。
再来证明第二个问题。
设y也是方程组的解。
则x≡y(mod mi) 即x-y≡0(mi);=>x≡y (M)
模M下x=y。
即x是唯一解。(2)得证。
附上模板:
============ _(:з」∠)_===我是模板=======================================================================
intChi_r()
{
for(int i=0;i<n;i++)
M*=m[i];
int x,y;
for(int i=0;i<n;i++)
{
Mi=M/m[i];
exgcd(Mi,m[i],x,y);
Mi1=x;
ans+=(b[i]*Mi*Mi1)%M;
ans%=M;
}
return ans;
}
==============_(:з」∠)_====模板债见=====================================================================
2.下面写中国剩余定理的非互质版(我们再来证明一下 _(:з」∠)_)
给定 n个方程
X≡b1(mod m1) ,X≡b2(mod m2)…………X≡bn(mod mn).
m1,m2,……,mn可以任意取,不一定是互质的。。。
这时候,我们需要利用方程合并的思想,将两个方程合并成一个。
取两个方程:
X≡b1(mod m1)
X≡b2(mod m2)
容易得到:
X=b1+m1*k1;
X=b2+m2*k2;
我们要找1、2方程的通解。就要让 b1+m1k1符合第二个方程。
此时 b1+m1*k1=b2+m2*k2=>m1k1=b2-b1+m2k2
m1k1≡b2-b1(mod m2) 要想使方程有解,g=gcd(m1,m2),则(b2-b1)|g(整除)
将方程化简得 m1k1/g≡(b2-b1)/g (mod m2/g);
k1=K+C*(m2/g);(K为最小非负整数)
则X=b1+m1(K+C*(m2/g));此时的X是1,2方程的通解。
X≡b1+m1*K (mod m1*m2/g) =>合并后的方程。
令b1=b1+m1*K,m1=m1*m2/g =>X≡b1(mod m1) 再与下面的方程继续合并。
附上模板:
============ _(:з」∠)_===我是模板========================================================================
boolChi_r()//方程组是否有解
{
int m1=m[0],b1=b[0],k1,y;
for(int i=1;i<n;i++)
{
int m2=m[i],b2=b[i];
int g=exgcd(m1,m2,k1,y);
if((b2-b1)%g!=0)
{
return 0;
}
k1=(k1*((b2-b1)/g)%m2+m2)%m2;
int t=m2/d;
int K=(k1%t+t)%t;
b1+=K*m1;m1=m1/g*m2;
}
return 1;//b1%m1为最小非负整数解
}
============ _(:з」∠)_===模板债见======================================================================
Showing time:
附上几道基础的练习题:
poj 1006 Biorhythms简单
poj 2891 Strange Way to Express Integers(互质)
hdu 1788 Chineseremainder theorem again(最小公倍数)也可以用中国剩余定理练习下
hdu 1573 X问题(非互质基础)
hdu 3579 Hello Kiki(非互质基础)
都是很基础的模板题,主要是练习模板的使用和解方程组的流程。
有空再总结下通用的线性方程组模板^O^
_(:з」∠)_