中国剩余定理(CRT)

今有物,不知其数,三三数之,剩二;五五数之,剩三;七七数之,剩二。问物几何          ——《孙子算经》

答为“23”。也就是求同余式组 x≡2 (mod3),x≡3 (mod5 ),x≡2 (mod7)的正整数解。

不难看出,题中3,5,7分别是互质的。具体解法是这样的

1、找出三个数:从3和5的公倍数中找出被7除余1的最小数15,从3和7的公倍数中找出被5除余1 的最小数21,最后从5和7的公倍数中找出除3余1的最小数70。
2、用15乘以2(2为最终结果除以7的余数),用21乘以3(3为最终结果除以5的余数),同理,用70乘以2(2为最终结果除以3的余数),然后把三个乘积相加15∗2+21∗3+70∗2得到和233。
3、用233除以3、5、7的最小公倍数105,得到余数23,这个余数23就是符合条件的最小数。

换成公式:

x ≡2(mod 3)
x ≡3(mod 5)
x ≡2(mod 7)
则进一步得
lcm(5,7)·k≡1(mod 3) →70 ≡1(mod 3)
lcm(3,7)·k≡1(mod 5) →21 ≡1(mod 5)
lcm(3,5)·k≡1(mod 7) →15 ≡1(mod 7)
所以
70×2+21×3+15×2 ≡ x (mod(lcm(3,5,7)))
233 ≡x (mod 105)
得到x=23+105k(k ∈Z) 。这里x的取值有无数多个,当k==0时最小为23,满足题意。

--同余的解法: 因M除以3和7都余2,有等差数列2+21N满足除以3和7都余2,

在2+21N数列 取5项:2,23,44,65,86,得23/5余3,因3*5*7=105,即23+105N数列的数都满足这些条件。最小的就是23

中国剩余定理又称孙子定理,它的证明这样的

因为(mi,mj)=1,i!=j, (这里mi,mj是互素的,如上题中2,3,7),则 (Mi, mi)=1,对每个Mi,都存在Ni,使得                
MiNi ≡1 (mod mi) 
又m=mi Mi ,故mj | Mi , i!=j,即
MiNi≡0 (mod mj)
则M1 N1b1+ M2 N2b2+…+ Mk Nk bk≡ bi (mod mi).因此
x≡M1 N1b1+ M2 N2b2+…+ Mk Nk bk (mod m)是同余方程的整数解

唯一性证明:

如果y也是上述同余方程的解,则满足
x≡y(mod m1); x≡y(mod m2); …; x≡y(mod mk)
即m1 |(x-y), m2 |(x-y),…, mk |(x-y).所以     
m|(x-y)
即x≡y(mod m). 即证方程在模m条件下有唯一解。

证明可能有点难理解,可以看看例题帮助理解:

韩信点兵
韩信带贰仟伍佰士兵出去打仗,回营后,刘邦问士兵人数。韩信让士兵先列成五行纵队,末行一人;列成六行纵队,末行五人;列成七行纵队,末行四人;列成十一行纵队,末行十人。韩信立刻回答二千一百一十一人。刘邦惊为天人!

看过题目后就知道该如何求解了。即解一次同余方程组:(1)x ≡1(mod5);   x ≡5(mod6);  x ≡4(mod7);   x ≡10(mod11)

(2)用孙子定理,

m1 =5, m2 =6, m3=7, m4 =11;这些是对应的除数,

b1 =1, b2 =5, b3=4, b4 =10;这些是对应的商,

m=5*6*7*11=2310;所有除数的乘积。

因此对应的Mi为M1 =462(2310/5),M2=385(2310/6),M3=330(2310/7)。M4=210(2310/11)

对应的Ni(逆元)为N1=3,N2=1,N3=1,N4=1

所以 x ≡ 462*3*1+ 385*1*5+ 330*1*4+210*1*10 ≡6731 ≡2111(mod2310) ,最小为2111。

这里有一个求解思路图:

 1 int china (int *a ,int *m, int n)
 2 {
 3     int M=1,ans=0,mi,i,x,y;
 4     for(i=0;i<n;i++)
 5     M*=m[i];                //M=m1*m2*m3...*mn
 6     for(i=0;i<n;i++)
 7     {
 8         mi=M/m[i];           //Mi=M/mi
 9         exGcd(m[i],mi,x,y);      //扩展欧几里德
10         ans=(ans+mi*y*a[i])%M;
11     }
12     return (ans%M+M)%M;
13 }    

题目链接:Biorhythms

原文地址:https://www.cnblogs.com/ygsworld/p/11107688.html

时间: 2024-11-03 20:56:02

中国剩余定理(CRT)的相关文章

对于中国剩余定理(CRT)的初步理解

以前觉得用中国剩余定理来求同余方程组很鸡肋,因为可以用拓展欧几里得算法来构造出一种更加强大(可以处理取模的数(默认为mi)不互质的情况)的算法. 今天查了点资料,发现我太天真了. 首先讲讲中国剩余定理: 即 : x ≡ a[i] (mod m[i]) 1<= i <= r (m[i] 两两互质) 求这个同余方程组可以快速算: x = ∑M/m[i] * Inv(M/m[i], m[i]) * a[i] (mod M) 其中M = m[1]*m[2]*m[3]...m[r]  , Inv(x,

中国剩余定理(CRT) &amp; 扩展中国剩余定理(ExCRT)总结

中国剩余定理(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{aligned} \rig

扩展GCD 中国剩余定理(CRT) 乘法逆元模版

extend_gcd: 已知 a,b (a>=0,b>=0) 求一组解 (x,y) 使得 (x,y)满足 gcd(a,b) = ax+by 以下代码中d = gcd(a,b).顺便求出gcd 能够扩展成求等式 ax+by = c,但c必须是d的倍数才有解,即 (c%gcd(a,b))==0 注意求出的 x,y 可能为0或负数 =================================== 乘法逆元: a*b %n == 1 已知 a, n, 求b 就是乘法逆元 ============

欧几里得(辗转相除gcd)、扩欧(exgcd)、中国剩余定理(crt)、扩展中国剩余定理(excrt)简要介绍

1.欧几里得算法(辗转相除法) 直接上gcd和lcm代码. 1 int gcd(int x,int y){ 2 return y==0?x:gcd(y,x%y); 3 } 1 int lcm(int x,int y){ 2 return x*y/gcd(x,y); 3 } 2.扩欧:exgcd:对于a,b,一定存在整数对(x,y)使ax+by=gcd(a,b)=d ,且a,b互质时,d=1. x,y可递归地求得. 我懒得改返回值类型了 1 long long exgcd(long long a,

扩展中国剩余定理(扩展CRT)详解

今天在$xsy$上翻题翻到了一道扩展$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 \pmod{m_2}

【CRT】中国剩余定理简介

中国剩余定理(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

(light oj 1319) Monkey Tradition 中国剩余定理(CRT)

题目链接:http://lightoj.com/volume_showproblem.php?problem=1319 In 'MonkeyLand', there is a traditional game called "Bamboo Climbing". The rules of the game are as follows: 1) There are N monkeys who play this game and there are N bamboos of equal h

扩展欧几里得(ex_gcd),中国剩余定理(CRT)讲解 有代码

扩展欧几里得算法 求逆元就不说了. ax+by=c 这个怎么求,很好推. 设d=gcd(a,b) 满足d|c方程有解,否则无解. 扩展欧几里得求出来的解是 x是 ax+by=gcd(a,b)的解. 对于c的话只需要x*c/gcd(a,b)%(b/d)即可,因为b/d的剩余系更小. 为什么这样呢? 设a'=a/d,b'=b/d 求出a'x+b'y=1的解,两边同时乘d,然后x也是ax+by=d的解, 然后因为b'的剩余系更小,所以%b’ 中国剩余定理是合并线性方程组的 中国余数定理 转化为一个线性

UVA 11754 Code Feat (枚举,中国剩余定理)

转载请注明出处: http://www.cnblogs.com/fraud/          ——by fraud C Code Feat   The government hackers at CTU (Counter-Terrorist Unit) have learned some things about the code, but they still haven't quite solved it.They know it's a single, strictly positive