中国剩余定理
什么是中国剩余定理
什么是中国剩余定理?剩余定理详细解法中国数学史书上记载:在两千多年前的我国古代算书《孙子算经》中,有这样一个问题及其解法:今有物不知其数,三三数之剩二;五五数之剩三:七七数之剩二。
问物几何?意思是说:现在有一堆东西,不知道它的数量,如果三个三个的数最后剩二个,如果五个五个的数最后剩三个,如果七个七个的数最后剩二个,问这堆东西有多少个?你知道这个数目吗?《孙子算经》这道著名的数学题是我国古代数学思想“大衍求一术”的具体体现,针对这道题给出的解法是:N=70×2+21×3+15×2-2×105=23如此巧妙的解法的关键是数字70、21和15的选择: 70是可以被5、7整除且被3除余1的最小正整数,当70×2时被3除余2 21是可以被3、7整除且被5除余1的最小正整数,当21×3时被5除余3 15是可以被3、5整除且被7除余1的最小正整数,当15×2时被7除余2 通过这种构造方法得到的N就可以满足题目的要求而减去2×105 后得到的是满足这一条件的最小正整数。
韩信点兵又称为中国剩余定理,相传汉高祖刘邦问大将军韩信统御兵士多少,韩信答说,每3人一列余1人、5人一列余2人、7人一列余4人、13人一列余6人……。
刘邦茫然而不知其数。
我们先考虑下列的问题:假设兵不满一万,每5人一列、9人一列、13人一列、17人一列都剩3人,则兵有多少?首先我们先求5、9、13、17之最小公倍数9945(注:因为5、9、13、17为两两互质的整数,故其最小公倍数为这些数的积),然后再加3,得9948(人)。
中国有一本数学古书「孙子算经」也有类似的问题:「今有物,不知其数,三三数之,剩二,五五数之,剩三,七七数之,剩二,问物几何?」答曰:「二十三」术曰:「三三数之剩二,置一百四十,五五数之剩三,置六十三,七七数之剩二,置三十,并之,得二百三十三,以二百一十减之,即得。
中国剩余定理(孙子定理)详解
中国剩余定理(孙⼦定理)详解问题:今有物不知其数,三三数之剩⼆,五五数之剩三,七七数之剩⼆。
问物⼏何?简单点说就是,存在⼀个数x,除以3余2,除以5余三,除以7余⼆,然后求这个数。
上⾯给出了解法。
再明⽩这个解法的原理之前,需要先知道⼀下两个定理。
定理1:两个数相加,如果存在⼀个加数,不能被整数a整除,那么它们的和,就不能被整数a整除。
定理2:两数不能整除,若除数扩⼤(或缩⼩)了⼏倍,⽽被除数不变,则其商和余数也同时扩⼤(或缩⼩)相同的倍数(余数必⼩于除数)。
以上两个定理随便个例⼦即可证明!现给出求解该问题的具体步骤:1、求出最⼩公倍数lcm=3*5*7=1052、求各个数所对应的基础数(1)105÷3=3535÷3=11......2 //基础数35(2)105÷5=2121÷5=4 (1)定理2把1扩⼤3倍得到3,那么被除数也扩⼤3倍,得到21*3=63//基础数633、105÷7=1515÷7=2 (1)定理2把1扩⼤2倍得到2,那么被除数也扩⼤2倍,得到15*2=30//基础数30把得到的基础数加和(注意:基础数不⼀定就是正数)35+63+30=1284、减去最⼩公倍数lcm(在⽐最⼩公倍数⼤的情况下)x=128-105=23那么满⾜题意得最⼩的数就是23了。
⼀共有四个步骤。
下⾯详细解释每⼀步的原因。
(1)最⼩公倍数就不解释了,跳过(记住,这⾥讨论的都是两两互质的情况)(2)观察求每个数对应的基础数时候的步骤,⽐如第⼀个。
105÷3=35。
显然这个35是除了当前这个数不能整除以外都能够被其他数整除,就是其他数的最⼩公倍数。
相当于找到了最⼩的起始值,⽤它去除以3发现正好余2。
那么这个基础数就是35。
记住35的特征,可以整除其他数但是不能被3整除,并且余数是2。
体现的还不够明显,再看下5对应的基础数。
21是其他数的最⼩公倍数,但是不能被5整除,⽤21除以5得到的余数是1,⽽要求的数除以5应该是余1的。
中国剩余定理
m1 3
m2 5
取
M1 1
M2 1
M3 1
则唯一解为
x 35 (1) 2 211 3 15 1 2 (mod 105) 23
例2 求最小的正整数 n, 使得 n 被 3,5,11 除的 余数分别是 2,3,5
解 对 x 2(mod 3),x 3(mod 5), x 5(mod 11)
x bk (mod mk ) 则 (*) 有解 (mi , m j ) | ai a j
(*)
x 2(mod 3), x 3(mod 5), x 2(mod 7)
a 2 (mod 3), a 0 (mod 5), a 0 (mod 7) b 0 (mod 3), b 3 (mod 5), b 0 (mod 7) c 0 (mod 3), c 0 (mod 5), c 2 (mod 7)
设 因此
g i ( x) (ai a1 )(ai ai 1 )(ai ai 1 )(ai an )
( x a1 )( x ai 1 )( x ai 1 )( x an )
中国剩余定理的代数表示 设 m 1, 则
m 的标准分解式为 m p1 p2 ps
习题
求解 f ( x) 0(mod 35)
f ( x) x 2 x 8 x 9
4 3
1 求最小的正整数 n,使得它的 是一个平方数, 2 1 1 是一个立方数, 是一个5次方数. 3 5
广义的中国剩余定理 设
x b1 (mod m1 ), x b2 (mod m2 ),
(mod 60)
求解
f ( x) 0(mod m)
中国剩余定理
中国剩余定理
《孙子算经》有云:
今有物不知其数,三三数之剩二;五五数之剩三;七七数之剩二。
问物几何?答曰:二十三。
设”此物”为x,则x满足同余方程组:
若存在x满足上述方程组,则也满足该方程其中k任意整数,方程的最小正整数解满足,即对3,5,7的最小公倍数求余。
在介绍求x的具体方法之前,先介绍两个简单的定理(证明从略):
1.被除数增加(或减少)除数的倍数,除数不变,则余数电不变;
2.被除数扩大(或缩小)指定的倍数,除数不变,则余数扩大(或缩小)同样的倍数(余数总小
于除数)。
接下来,我们这样构造满足条件的x:x由三项相加得出,其中第一项是5和7的倍数且被3除余2,第二项是3和7的倍数且被5除余3,第三项是3和5的倍数且被7除余2。
即。
又由于:
所以,于是
;
所以;
所以.
最后,
反复观察上述构造过程,我们就不难从中找出规律,而这个规律就是下面要介绍的中国剩余定理,又称孙子定理。
它说的是,设为互质整数。
为最小公倍数。
又有关于W的同余方程组如下:
该方程组有且仅有解
其中,
为调整因子,使得。
中国剩余定理ppt
m = n / w[i];
d = extended_euclid(w[i], m, x, y);
ret = (ret + y*m*b[i]) % n;
}
return (n + ret%n) % n;
}
模板:最大公约数
int gcd(int a,int b) {
if(0 == a )
return b;
int flag;
while (scanf ("%I64d", &n) != EOF){
scanf ("%I64d%I64d", &m1, &a1);
n--; flag = 0;
while (n--) {
scanf ("%I64d%I64d", &m2, &a2);
d = exGcd (m1, m2, x, y);
e==-1 && d==-1)){
j++;
k=(p*5544+e*14421+i*1288-d+21252)%21252;
if(k>0)
printf("Case %d: the next triple peak occurs in %d days、
\n",j,k);
else
printf("Case %d: the next triple peak occurs in 21252 days、
一些关于中国剩余定理得定理:
定理2:二数不能整除,若被除数扩大(或缩小) 了几倍,而除数不变,则其余数也同时扩大(或 缩小)相同得倍数(余数必小于除数)。
中国剩余定理简介
中国剩余定理简介在《孙⼦算经》中有这样⼀个问题:“今有物不知其数,三三数之剩⼆(mod3=2),五五数之剩三(mod5=3),七七数之剩⼆(mod7=2),问物⼏何?”这个问题称为“孙⼦问题”,该问题的⼀般解法国际上称为“中国剩余定理”。
具体解法分下⾯三步: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∗215∗2+21∗3+70∗2得到和233。
3、⽤233除以3、5、7的最⼩公倍数105,得到余数23,这个余数23就是符合条件的最⼩数。
很神奇,是吧?我们逐步剖析。
我们第⼀⽬标是求⼀个数n符合条件,⽽不需最⼩。
我们先假设n1是满⾜mod3=2的任意⼀个数,n2是满⾜mod5=3的任意⼀个数,n1是满⾜mod7=2的任意⼀个数。
如果想要(n1+n2)也mod3=2,n2必须是3的倍数(易证)。
如果想要(n1+n2+n3)也mod3=2,n3也得是3的倍数。
归纳得要想(n1+n2+n3)同时满⾜mod3=2,mod5=3,mod7=2,必须有:1. n1mod3=2 && 5|n1 && 7|n12. n2mod5=3 && 3|n2 && 7|n23. n3mod7=5 && 3|n3 && 5|n3于是只需要在5,7的倍数中找⼀个mod3=2的作为n1,在3,7的倍数中找⼀个mod5=3的作为n2,在3,5的倍数中找⼀个mod7=2的作为n3即可。
解决这个⼩问题孙⼦⼜⽤了⼀个⼩技巧。
就是不是先找mod3=2的,⽽是先找mod3=1的再把它乘2⾃然它就mod3=2了。
中国剩余定理简单公式
中国剩余定理简单公式中国剩余定理,又称孙子定理,是一种用来求解一类模线性方程组的方法。
它的基本思想是将一个复杂的方程组化简成一些简单的方程,并通过求解这些简单方程来得到原方程的解。
中国剩余定理的简单公式可以表示为:假设给定一组模数m1, m2, ..., mn,并且这些模数两两互素(即最大公约数为1),同时给定一组余数a1, a2, ..., an,那么存在一个整数x,满足以下条件:x ≡ a1 (mod m1)x ≡ a2 (mod m2)...x ≡ an (mod mn)其中≡表示'同余'关系,即两个数除以某个数的余数相等。
中国剩余定理的求解过程可以按照以下步骤进行:1. 计算模数的乘积M = m1 * m2 * ... * mn。
2. 计算每个模数除以M的余数Mi,即 Mi = M / mi。
3. 计算Mi关于模数mi的乘法逆元ni,即满足 Mi * ni ≡ 1 (mod mi)。
4. 计算解x,即 x = (a1 * Mi * ni + a2 * Mi * ni + ... + an * Mi * ni) % M。
通过以上步骤,就可以得到模线性方程组的解x。
中国剩余定理在密码学、编码理论、计算机科学等领域有着重要的应用。
它可以高效地求解大数模运算问题,同时也可以用来对数据进行加密和解密,保护数据的安全性。
此外,中国剩余定理还可以用来加速计算,提高算法的效率。
总结起来,中国剩余定理是一种非常有用的数学工具,它通过将复杂的方程组转化为简单的方程,大大简化了问题的求解过程。
无论是在理论研究还是实际应用中,中国剩余定理都具有重要的价值和意义。
中国剩余定理
中国剩余定理(孙子定理)定义中国古代求解一次同余式组(见同余)的方法。
是数论中一个重要定理。
又称中国剩余定理。
编辑本段内容1、分别找出能任两个数整除,而满足被第三个整除余几的数。
2、将三个未知数加起来,减去这三个数的最小公倍数的整数倍。
N≡R1(mod d1) ≡R2(mod d2)≡R3(mod d3)则N=k1d2d3R1+k2d1d3R2+k3d1d2R3±d1d2d3P其中P为任意非负整数k1是满足k1d2d3≡1(mod d1)的最小正整数k2是满足k2d1d3≡1(mod d2)的最小正整数k3是满足k3d1d2≡1(mod d3)的最小正整数编辑本段解法解法中的三个关键数70,21,15,有何妙用,有何性质呢?首先70是3除余1而5与7都除得尽的数,所以70a是3除余a,而5与7都除得尽的数,21是5除余1,而3与7都除得尽的数,所以21b是5除余b,而3与7除得尽的数。
同理,15c是7除余c,3与5除得尽的数,总加起来 70a+21b+15c 是3除余a,5除余b ,7除余c的数,也就是可能答案之一,但可能不是最小的,这数加减105(105=3*5*7)仍有这样性质,可以多次减去105而得到最小的正数解。
附:如70,其实是要找余2的,但只要找到了余1的再乘2即余二了。
孙子问题的解法,以现代的说法,是找出三个关键数70,21,15。
解法的意思就是用70乘3除所得的余数,21乘5除所得的余数,15乘7除所得的余数,然后总加起来,除以105的余数就是答案。
即题目的答案为70×2+21×3+15×2=140+63+30=233233-2×105=23公式:70a+21b+15c-105n题中有三个数,分别为3、5、7,5*7/3余数为2,取35;3*7/5余数为1,要使余数为3,只需将3*7扩大3倍变成63即可;同样3*5/7的余数为1,要使余数为2,则将3*5扩大2倍,变成30。
【中国剩余定理(孙子定理)】
【中国剩余定理(孙⼦定理)】中国剩余定理,⼜称孙⼦定理(什么名字啊)是中国古代求解⼀次同余式组(见同余)的⽅法。
是数论中⼀个重要定理。
⾸先来⼀个⼩!例!题!吧!注释:三数为a b c,余数分别为 m1 m2 m3,%为求今年余计算,&&是“且”运算。
1、分别找出能被两个数整除,⽽满⾜被第三个整除余⼀的最⼩的数。
k1%b==k1%c==0 && k1%a==1;k2%a==k2%c==0 && k2%b==1;k3%a==k3%b==0 && k3%c==1;2、将三个未知数乘对应数字的余数再加起来,减去这三个数的最⼩公倍数的整数倍即得结果。
Answer = k1×m1 + k2×m2 + k3×m3 - P×(a×b×c);P为满⾜Answer > 0的最⼤整数;或者 Answer = (k1×m1 + k2×m2 + k3×m3)%(a×b×c) ;我们来⼩⼩的证明⼀波 设M=m1*m2*......*mn Mi=M/mi 设Mi的逆元为Mi^(-1)(mod mi) 有Mi*Mi^(-1)≡1(mod mi) ai*Mi*Mi^(-1)≡ai(mod mi) 对于所有的j不等于i ai*Mi*Mi^(-1)≡0(mod mj) 所以答案就是所有ai*Mi*Mi^(-1)(mod p)的值1 #include<bits/stdc++.h>2using namespace std;3long long x,y;4long long a[15],b[15];5long long n;6void exgcd(long long A,long long B)7{8if(B==0)9 {10 x=1;11 y=0;12return;13 }14 exgcd(B,A%B);15long long z=x;16 x=y;17 y=z-(A/B)*y;18}19long long fast(long long a1,long long b1,long long mod)20{21long long ans=0;22 a1%=mod;23 b1%=mod;24while(b1)25 {26if(b1&1)27 {28 ans=(ans+a1)%mod;29 }30 b1>>=1;31 a1=(a1+a1)%mod;32 }33return ans;34}35long long china()36{37long long ans=0;38long long M=1;39for(long long i=1;i<=n;i++)40 M*=b[i];41for(long long i=1;i<=n;i++)42 {43long long m=M/b[i];44 exgcd(m,b[i]);45while(x<0)46 x+=b[i];47 x%=b[i];48 ans=(ans+fast(x,fast(m,(a[i]+M)%M,M),M)+M)%M;49 }50return ans;51}52int main()53{54 cin>>n;55for(long long i=1;i<=n;i++)56 {57 scanf("%lld",&a[i]);58 }59for(long long i=1;i<=n;i++)60 {61 scanf("%lld",&b[i]);62 }63 cout<<china();64return0;65 }。
中国剩余定理
中国剩余定理金庸先生的《射雕英雄传》畅销全球的华人社区,很多人也知道郭靖和黄蓉的故事,但原来在《射雕英雄传》内也有有关数学的名题同时随小说传至全球的华人社区,这便是「孙子定理」或称「鬼谷算」、「隔墙算」、「剪管术」、「秦王暗点兵」或「韩信点兵」,但当今数学界则称之为「中国剩余定理」(Chinese Remainder Theorem)。
话说郭靖和黄蓉在离开泥沼时,黄蓉下了三道题目挑战号称「神算子」的瑛姑,当中的第三道题目,便是这著名的「鬼谷算」:「今有物不知其数,三三数之剩二;五五数之剩三,七七数之剩二。
问物几何?」(摘自《孙子算经》卷下,第26题)如果用白话写出,意思是:现在一个未知数,除3时,余数是2;除5时,余数是3;除7时,余数是2,问这个未知数的最小值?这道题目如此简单,何以会是名题呢?事实上,《射雕英雄传》里的瑛姑不难便得出答案是23;而中国著名数学家华罗庚教授,对这道题目有以下的说法:「求一个数,3除余2,5除余3,7除余2。
这个问题太容易回答了,因为3除余2,5除余3,7除余2,则21除余2。
而23是3、7余2最小的数,刚好又是5除余3的数。
所以心算快的人都算出!」(摘自《华罗庚科普著作选集》第84页)正如华罗庚教授所说,重点并不是计算出23这个结果,数学便是不仅于此。
瑛姑虽然得到答案,但她也得向黄蓉请教,因为瑛姑的答案是硬生生地试出来的,她明白倘若余数有变的话,她便可能要再花一段时间来试答案了,她找不到计算这一道题目的门径,或者说她找不到解这道题的普遍方法;而数学的研究便是希望找到这道题的特质,作出普遍化的解法。
你又可知道这道名题的普遍解吗?很多中国的名事迹或名题,在民间都有歌谣,有的唱出一个故事,有的唱出这些名题的解法。
而这「鬼谷算」也不例外,而且还有几个不同版本,以下是其中两个:三岁孩儿七十稀,五留廿一事尤奇,七度上元重相会,寒食清明便可知。
摘自《志雅堂杂钞》三人同行七十稀,五树梅花廿一枝,七子团圆正月半,除百零五便得知。
中国剩余定理计算过程
中国剩余定理计算过程摘要:一、中国剩余定理简介- 概念- 数学表达式二、模数和同余方程组- 模数的定义和性质- 同余方程组的表示方法三、中国剩余定理的计算步骤1.扩展欧几里得算法2.求解模数和通解3.计算模数和特解4.求解原同余方程组四、计算实例1.实例介绍2.计算过程3.结果分析正文:中国剩余定理是一种用于求解同余方程组的数学方法,它可以解决一组同余方程组是否有解以及如何求解的问题。
在数学领域中,同余方程组广泛应用于数论、密码学、计算机科学等领域,因此,中国剩余定理在这些领域中都有着重要的应用价值。
一、中国剩余定理简介中国剩余定理,又称为孙子定理,是数学家孙子于公元前3 世纪提出的一个数学定理。
该定理指出,如果两个整数a 和b 互质,那么同余方程组:ax ≡ b (mod m)对于任意整数x,都有唯一解。
其中,m 为模数,ax ≡ b (mod m) 表示a 与b 模m 同余。
二、模数和同余方程组在中国剩余定理中,模数是一个非常重要的概念。
模数是用于同余方程组中的一个正整数,它决定了同余方程组的解的范围。
同余方程组是指由两个或多个同余方程组成的方程组,它可以表示为:ax ≡ b (mod m)其中,a 和b 是整数,m 是模数。
三、中国剩余定理的计算步骤中国剩余定理的计算步骤主要包括扩展欧几里得算法、求解模数和通解、计算模数和特解以及求解原同余方程组。
1.扩展欧几里得算法:该算法用于求解两个整数a 和b 的最大公约数。
2.求解模数和通解:根据扩展欧几里得算法的结果,求解同余方程组的通解。
3.计算模数和特解:根据通解和同余方程组中的系数,计算同余方程组的特解。
4.求解原同余方程组:利用求得的通解和特解,求解原同余方程组。
四、计算实例下面通过一个实例来说明中国剩余定理的计算过程。
实例介绍:给定同余方程组:x ≡ 2 (mod 3)x ≡ 5 (mod 7)计算过程:1.求解扩展欧几里得算法:首先,求解2 和7 的最大公约数,得到1。
中国剩余定理计算过程
中国剩余定理计算过程摘要:一、引言二、中国剩余定理的概念和基本原理三、中国剩余定理的算法实现四、中国剩余定理的应用案例五、总结正文:一、引言中国剩余定理,又称孙子定理,是我国古代数学家孙子所提出的一个著名数学定理。
这个定理在现代数学领域有着广泛的应用,特别是在数论、代数和计算机科学等方面有着重要的意义。
本文将介绍中国剩余定理的计算过程,并结合具体的应用案例,帮助读者更好地理解和掌握这一重要的数学定理。
二、中国剩余定理的概念和基本原理中国剩余定理是关于同余方程组的一个定理。
同余方程组是指由一系列同余方程所构成的方程组,例如:x ≡ a (mod m),x ≡ b (mod n),x ≡ c (mod p) 等。
中国剩余定理指出,如果这些同余方程的模数两两互质,那么这个同余方程组必有解,且解的个数为模数的最小公倍数。
三、中国剩余定理的算法实现中国剩余定理的算法实现有多种方法,其中比较常见的方法是基于miracle 算法的实现。
miracle 算法是一种高效的大数运算库,能够高效地实现大数的模运算、乘法和幂运算等。
下面是基于miracle 算法实现中国剩余定理的步骤:1.判断同余方程的模数是否两两互质。
如果模数不互质,则无法直接应用中国剩余定理求解。
2.根据中国剩余定理,计算同余方程组的解。
利用miracle 算法,可以高效地实现大数的模运算,从而求解出同余方程组的解。
3.如果同余方程组的解的个数小于模数的最小公倍数,说明同余方程组存在多个解。
此时,需要继续寻找其他解,直到找到所有可能的解为止。
四、中国剩余定理的应用案例中国剩余定理在实际应用中有很多案例,例如:在计算机科学中,中国剩余定理可以用于求解密码学中的难题,如RSA 加密算法中的模数分解问题;在数论中,中国剩余定理可以用于证明一些重要的定理,如费马小定理等。
五、总结本文介绍了中国剩余定理的计算过程,基于miracle 算法的实现方法,并结合具体的应用案例,帮助读者更好地理解和掌握这一重要的数学定理。
中国剩余定理的证明过程
中国剩余定理的证明过程中国剩余定理(Chinese Remainder Theorem,CRT)是一个数论定理,用于解决一组模同余方程的问题。
它的证明过程可以通过数学归纳法来进行。
首先,我们考虑一个非常简单的情况,即两个数$a_1$和$a_2$的模同余方程:$x ≡ a_1 (mod\, m_1)$$x ≡ a_2 (mod\, m_2)$假设$m_1$和$m_2$互质,我们可以用扩展欧几里得算法找到一组整数$s_1$和$s_2$,使得$s_1 \cdot m_1 + s_2 \cdot m_2 = 1$。
那么我们可以构造一个解$x = a_1 \cdot s_2 \cdot m_2 + a_2\cdot s_1 \cdot m_1$。
这个解使得$x ≡ a_1 \cdot s_2 \cdot m_2 + a_2 \cdot s_1 \cdot m_1 \equiv a_1 (mod\, m_1)$,因为$a_2 \cdot s_1 \cdot m_1 ≡ 0 (mod\, m_1)$;同时也满足$x ≡ a_1 \cdot s_2 \cdot m_2 + a_2 \cdot s_1 \cdot m_1 \equiv a_2 (mod\, m_2)$,因为$a_1 \cdot s_2 \cdot m_2 ≡ 0 (mod\, m_2)$。
接下来我们考虑一个更一般的情况,有$n$个模同余方程:$x ≡ a_1 (mod\, m_1)$$x ≡ a_2 (mod\, m_2)$...$x ≡ a_n (mod\, m_n)$其中$m_1,\, m_2,\, ..., \,m_n$互质。
我们可以通过多次使用上述简单情况的结论,逐步减少方程的个数。
首先,我们可以通过两个方程来构造一个新的方程组:$x_1 ≡ a_1 (mod\, m_1)$$x_1 ≡ a_2 (mod\, m_2)$$x_2 ≡ a_2 (mod\, m_2)$$x_2 ≡ a_3 (mod\, m_3)$...$x_{n-1} ≡ a_{n-1} (mod\, m_{n-1})$$x_{n-1} ≡ a_n (mod\, m_n)$通过这样的构造,我们可以将$n$个方程减少为$n-1$个方程。
中国剩余定理内容 加密 c语言
中国剩余定理内容加密c语言中国剩余定理(Chinese Remainder Theorem, CRT)是一个关于模线性同余方程组的定理。
给定一组两两互质的正整数(m_1, m_2, \ldots, m_k) 和任意整数(a_1, a_2, \ldots, a_k),中国剩余定理保证了存在唯一的模(M = m_1 \cdot m_2 \cdot \ldots \cdot m_k) 的解(x),使得对于所有的(i),都有(x \equiv a_i \pmod{m_i})。
在加密领域,中国剩余定理可用于构造一些密码系统,如RSA加密算法的某些变体。
不过,通常的RSA加密并不直接依赖于中国剩余定理,而是基于大数分解的难度。
下面是一个简单的C语言实现,用于求解中国剩余定理的一个解:c复制代码#include<stdio.h>// 扩展欧几里得算法用于求解 ax + by = gcd(a, b) 的一组解 (x, y) long long extended_gcd(long long a, long long b, long long *x, long long *y) {if (b == 0) {*x = 1;*y = 0;return a;}long long d = extended_gcd(b, a % b, x, y);long long tmp = *x;*x = *y;*y = tmp - (a / b) * (*y);return d;}// 中国剩余定理求解long long chinese_remainder_theorem(int n, long long *a, long long *m) {long long M = 1, ans = 0, x, y;for (int i = 0; i < n; i++) {M *= m[i];}for (int i = 0; i < n; i++) {long long Mi = M / m[i];extended_gcd(Mi, m[i], &x, &y);ans = (ans + Mi * x * a[i]) % M;}return (ans + M) % M; // 保证结果是非负的}int main() {int n = 3; // 方程的数量long long a[] = {2, 3, 2}; // 每个方程的 a_ilong long m[] = {3, 5, 7}; // 每个方程的 m_i,需要两两互质long long x = chinese_remainder_theorem(n, a, m);printf("The solution is: %lld\n", x);return0;}这段代码实现了一个简单的中国剩余定理求解器。
中国剩余定理
除数 余数 3 5 2 3
最小公倍数 衍数 乘率 5*7 3*5*7=105 7*3 2 1
各总 35*2*2 21*1*3
答数
最小 答数
140+ 23363+30 2*105 =233 =23
7
2
3*5
1
15*1*2
例 有一个年级的同学,每9人一排多6人,每7人一排多2人,
每5人一排多3人,问这个年级至少有多少人 ?
则r个同余方程组
k i 1
x ai mod mi (其中
1 i) r
模
M mi 有惟一解,且该解的表达式为:
x
其中, Mi
M mi
a M
i 1 i
r
i
y i (modm)
, yi M i1 mod mi , 1 i r 。
中国剩余定理的用途之一是:给出了一种方法,使非常大的 数对M的模运算转化到更小的数上来进行运算,当M为150 位或150位以上的时候,这种方法非常有效。
5.中国剩余定理
公元前后的《孙子算经》中有“物不知数”问题:“今有物
不知其数,三三数之余二 ,五五数之余三 ,七七数之余二,
问物几何?”答为“23”。也就是求同余式组x≡2 (mod3),
x≡3 (mod5 ),x≡2 (mod7)(式中a≡b (modm)表示m
整除a-b )的正整数解。
三三数之剩二,则置一百四十;五五数之剩三,置六十三; 明朝程大位用歌谣给出了该题的解法:“三人同行七十稀, 七七数之剩二,置三十;并之得二百三十三,以二百一十减 五树梅花廿一枝,七子团圆月正半,除百零五便得知。 ” 之,即得。凡三三数之剩一,则置七十;五五数之剩一,则 即解为 x≡2×70+3×21+2×15≡233≡23(mod105) 置二十一;七七数之剩一,则置十五,一百六以上,以一百 五减之,即得
中国剩余定理
中国剩余定理的由来我国古代数学名著《孙子算经》载有一道数学问题:“今有物不知其数,三三数之剩二,五五数之剩三,七七数之剩二。
问物几何?”这里的几何指多少的意思。
翻译成数学语言就是:求正整数N,使N除以3余2,除以5余3,除以7余2。
如何求符合上述条件的正整数N呢?《孙子算经》给出了一个非常有效的巧妙解法。
术曰:“三、三数之剩二,置一百四十;五、五数之剩三,置六十三;七、七数之剩二,置三十,并之,得二百三十三。
以二百一十减之,即得。
凡三、三数之剩一,则置七十;五、五数之剩一,则置二十一;七、七数之剩一,则置十五。
一百六以上,一百五减之,即得。
”过了一千多年,到了十六世纪,数学家程大位在他所著的《算法统宗》里把这个问题的解法用歌诀形式表述出来。
三人同行七十稀,五树梅花廿一枝,七子团圆正月半,除百零五便得之。
歌诀的前三句给出了三组数,后一句给出了一个数:3 705 217 15105三组数的共同特征是:70除以3余1,除以5、7余0; 21除以5余1,除以3、7余0; 15除以7余1,除以3、5余0。
首先程大位把不同的余数问题统一化为标准的余数问题。
然后,他把复杂难解的问题化解为三个易解的问题。
70、21、15分别是满足第一、二、三行条件的最小解。
2×70满足原题第一个余数条件,且被5、7整除。
3×21满足原题第二个余数条件,且被3、7整除。
2×15满足原题第三个余数条件,且被3、5整除。
统统相加得和:N=2×70+3×21+2×15=233。
N必然满足原题所有三个余数条件。
但N不一定是最小的。
歌诀最后一句“除百零五便得知”,这里“除”的意思是“减”,意即从233中减去3、5、7的最小公倍数105的倍数便得到23。
这个23就是问题的最小解。
这最后一句也可以理解为N除以105的余数就是问题的最小解。
中国古代数学有一个传统,总是以具体的数量关系表示一般的规律。
中国剩余定理多项式
中国剩余定理多项式中国剩余定理(Chinese Remainder Theorem,CRT)是数论中一个重要的定理,该定理与多项式的求解有密切的关系。
中国剩余定理可以应用于许多数学领域,例如密码学、计算机科学、算法等,在本文中,我们将介绍中国剩余定理的多项式解法及相关参考内容。
中国剩余定理的基本概念中国剩余定理,又称孙子定理,它是一种求解同余方程组的方法,能将一个模数为不同的同余方程组转化为仅含不同模数质数幂次数为1次的同余方程组。
设n1,n2,…,nk是k个正整数,它们各自互素,然后令N=n1n2…nk,则对任意整数a1,a2,…,ak,同余方程组x≡a1(mod n1)x≡a2(mod n2)⋯x≡ak(mod nk)必有解,且解在模N意义下唯一。
这个定理的证明需要数论中的群、模运算的概念,具体内容请参考相关的数论书籍。
中国剩余定理的多项式解法现给出求解同余方程组的多项式解法。
设n1,n2,…,nk是k个正整数,N=n1n2…nk。
对每个i,设Mi=N/ni,因为ni和Mi互质,所以存在整数zi使得:Mi⋅zi≡1(mod ni)然后设x=f1a1M1z1+f2a2M2z2+…+fkaKMkzk,其中fi=MkM1,M2,…,fi≠fk。
由此可以得到:x≡a1(mod n1)x≡a2(mod n2)⋯x≡ak(mod nk)假设对于i≠j,第i个方程与第j个方程的解是相同的,即:fi≡fj(mod ni)且fi≡fj(mod nj)则可以得到:fk≡fj(mod nk)(因为nk是ni的公因数)与假设矛盾,所以第i个方程与第j个方程的解不同。
因此,多项式x是该同余方程组唯一的解。
对于实际应用中的多项式求解,我们可以借助计算机的高速运算和多项式库,例如Numpy、sympy等,实现高效的计算和求解。
中国剩余定理的相关参考内容中国剩余定理是数论中一项重要的定理,应用广泛,其相关内容也有丰富的文献资料和参考内容。
中国剩余定理
中国剩余定理中国剩余定理(Chinese Remainder Theorem)是一种数论中的重要定理,用于求解一类关于模数不互素的同余方程组。
该定理由中国古代数学家孙子(Sunzi)在《孙子算经》中首次提出,因此得名。
中国剩余定理的核心思想是将一个复杂的同余方程组转化为一组简单的同余方程,然后通过求解这些简单方程来得到原方程的解。
中国剩余定理的应用广泛,不仅在数论中有重要的地位,还在密码学、编码理论、计算机科学等领域中有着广泛的应用。
中国剩余定理的具体表述如下:设n1, n2, , nk为k个正整数,它们两两互素,即gcd(ni, nj) = 1 (i ≠ j)。
给定k个整数a1, a2, , ak,求解同余方程组:x ≡ a1 (mod n1) x ≡ a2 (mod n2) . x ≡ ak (mod nk)中国剩余定理告诉我们,如果k个正整数n1, n2, , nk两两互素,那么对于给定的任意k个整数a1, a2, , ak,上述同余方程组一定存在解,并且解唯一模n = n1 * n2 * , * nk。
具体的解可以通过如下步骤求得:1.计算N = n1 * n2 * . * nk。
2.对于每个i,计算Ni = N / ni。
3.对于每个i,计算Mi = Ni^(-1) mod ni,其中Ni^(-1)是Ni在模ni下的逆元。
4.计算x = (a1 * N1 * M1 + a2 * N2 * M2 + . + ak * Nk * Mk) mod N。
通过上述步骤,我们可以得到方程组的唯一解x,满足x ≡ ai (mod ni) (1 ≤ i ≤ k)。
中国剩余定理的证明较为复杂,可以利用数论中的一些基本定理和性质进行推导。
但无论是证明还是应用,中国剩余定理都是一个非常有用的工具。
在密码学中,中国剩余定理被广泛应用于RSA算法的加密和解密过程中,以提高计算效率。
在编码理论中,中国剩余定理可以用于设计纠错码,提高数据传输的可靠性。
中国剩余定理
中国剩余定理先提醒大家过去曾经有过的一个经验.如果整数a除以整数b所得余数是1,那么,整数a的2倍、3倍、4倍、……、(b-1)倍除以整数b所得的余数就分别是1×2=2,1×3=3,1×4=4,…………1×(b-1)=b-1.例如,15÷7=2……余1,即2×15÷7=4 (2)3×15÷7=6 (3)4×15÷7=8 (4)5×15÷7=10 (5)6×15÷7=12 (6)还请大家注意一条经验.从某数a中连续减去若干个b后,求所得的要求小于数b的差数,实际上就是求数a 除以数b所得的余数.例如,从758里连续减去若干个105后,求所得的要求小于105的差数,实际上就是求758除以105所得的余数.即758÷105=7 (23)下面我们就来研究“孙子问题”.在我国古代算书《孙子算经》中有这样一个问题:“今有物不知其数,三三数之剩二,五五数之剩三,七七数之剩二,问物几何?”意思是,“一个数除以3余2,除以5余3,除以7余2.求适合这个条件的最小数.”这个问题称为“孙子问题”.关于孙子问题的一般解法,国际上称为“中国剩余定理”.实际上,上面的问题我们可以这样来想:分别写出除数3、5、7的两两公倍数.如下表:我们在第一组数中选出合乎“除以7余2”的较小数——30;在第二组数中选出合乎“除以5余3”的较小数——63;在第三组数中选出合乎“除以3余2”的较小数——35.根据和的整除性,可知30+63+35=128一定是一个同时合乎“被3除余2,被5除余3,被7除余2”的数(为什么?),但是不一定是最小的.要得到合乎条件的最小数,只要从中减去3、5、7的最小公倍数的若干倍,使得差数小于这个最小公倍数就是了.3、5、7的最小公倍数是3×5×7=105,因此,由于前面的经验二,可知128÷105=1 (23)这个余数23就是要求的合乎条件的最小数.有意义的是,虽然孙老先生的解法也是从对上表的思索得到的,但他的解法更具有一般性.亲爱的读者,你能猜想到孙子的一般解法吗?【规律】一个数除以3余2,除以5余3,除以7余2,求适合这个条件的最小数.孙子的解法是:先从3和5、3和7、5和7的公倍数中相应地找出分别被7、5、3除均余1的较小数15、21、70.即15÷7=2 (1)21÷5=4 (1)70÷3=23 (1)再用找到的三个较小数分别乘以被7、5、3除所得的余数的积连加,15×2+21×3+70×2=233.最后用和233除以3、5、7三个除数的最小公倍数.233÷105=2 (23)这个余数23就是合乎条件的最小数.以上三个步骤适合于解类似“孙子问题”的所有问题.。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
中国剩余定理在我国古代劳动人民中,长期流传着“隔墙算”、“剪管术”、“秦王暗点兵”等数学游戏。
有一首“孙子歌”,甚至远渡重洋,输入日本:“三人同行七十稀,五树梅花廿一枝,七子团圆正半月,除百令五便得知。
”这些饶有趣味的数学游戏,以各种不同形式,介绍世界闻名的“孙子问题”的解法,通俗地反映了中国古代数学一项卓越的成就。
“孙子问题”在现代数论中是一个一次同余问题,它最早出现在我国公元四世纪的数学著作《孙子算经》中。
《孙子算经》卷下“物不知数”题说:有物不知其数,三个一数余二,五个一数余三,七个一数又余二,问该物总数几何?显然,这相当于求不定方程组N=3x+2,N=5y+3,N=7x+2的正整数解N,或用现代数论符号表示,等价于解下列的一次同余组:N≡2(mod3)≡3(mod5)≡2(mod7)《孙子算经》所给答案是N=23。
由于孙子问题数据比较简单,这个答数通过试算也可以得到。
但是《孙子算经》并不是这样做的。
“物不知数”题的术文指出解题的方法:三三数之,取数七十,与余数二相乘;五五数之,取数二十一,与余数三相乘;七七数之,取数十五,与余数二相乘。
将诸乘积相加,然后减去一百零五的倍数。
列成算式就是:N=70×2+21×3+15×2-2×105。
这里105是模数3、5、7的最小公倍数,容易看出,《孙子算经》给出的是符合条件的最小正整数。
对与一般余数的情形,《孙子算经》术文指出,只要把上述算法中的余数2、3、2分别换成新的余数就行了。
以R1、R2、R3表示这些余数,那么《孙子算经》相当于给出公式N=70×R1+21×R2+15×R3-P×105(P是整数)孙子算法的关键,在于70、21和15这三个数的确定。
后来流传的《孙子歌》中所说“七下稀”、“廿一枝”和“正半月”,就是暗指这三个关键的数字。
《孙子算经》没有说明这三个数的来历。
实际上,它们具有如下特性:也就是说,这三个数可以从最小公倍数M=3×5×7=105中各约去模数3、5、7后,再分别乘以整数2、1、1而得到。
假令k1=2,k2=1,k3=1,那么整数k i(i=1,2,3)的选取使所得到的三数70、21、15被相应模数相除的时候余数都是1。
由此出发,立即可以推出,在余数R1、R2、R3的情况下综合以上三式又可得到≡R1(mod3)≡R2(mod5)≡R3(mod7)因为M=3×5×7可被它的任一因子整除,于是又有:≡R1(mod3)≡R2(mod5)≡R3(mod7)这里的P是整数。
这就证明了《孙子算经》的公式。
应用上述推理,可以完全类似地把孙子算法推广到一般情形:设有一数N,分别被两两互素的几个数a1、a2……a n相除得余数R1、R2、……R n,即N≡R i(mod ai)(i=1、2、……n)只需求出一组数K i,使满足那么适合已给一次同余组的最小正数解是这就是现代数论中著名的剩余定理。
如上所说,它的基本形式已经包含在《孙子算经》“物不知数”题的解法之中。
不过《孙子算经》没有明确地表述这个一般的定理。
孙子问题出现在公元四世纪的中国算书中,这并不是偶然的。
我国古代天文历法资料表明,一次同余问题的研究,明显地受到天文、历法需要的推动,特别是和古代历法中所谓“上元积年”的计算密切相关。
大家知道,一部历法,需要规定一个起算时间,我国古代历算家把这个起点叫做“历元”或“上元”,并且把从历元到编历年所累积的时间叫做“上元积年”。
上元积年的推算需要求解一组一次同余式。
以公元三世纪三国时期魏国施行的《景初历》做例,这部历法规定以冬至、朔旦(朔日子夜)和甲子日零时会合的时刻作为历元。
设a是一回归年日数,b是一朔望月日数,当年冬至距甲子日零时是R1,离平朔时刻是R2日,那么《影初历》上元积元数N就是同余组aN≡R i(mod 60)≡R2(mod b)的解。
到了南北朝时期,祖冲之《大明历》(公元462年)更要求历元必须同时是甲子年的开始,天“日月合璧”、“五星联珠”(就是日、月、五大行星处在同一方位),月亮又恰好行经它的近地点和升交点。
这样的条件下推算上元积年,就相当于要求解十个同余式了。
天文历法数据一般又都十分庞杂,所以,在《孙子算经》成书前后的魏晋南北朝时期,我国的天文历算家无疑已经能够求解形式比《孙子算经》“物不知数”题复杂得多的一次同余式,因而必定掌握了按一定程序计算一次同余式的方法。
《孙子算经》比例题的形式总结、反映了这一事实。
以后天文历算家长期沿用孙子算法推算上元积年,这中间肯定会引起更加深入的探讨。
到公元13世纪,大数学家秦九韶集前法之大成,终于在一次同余式的研究上获得了超越前人的辉煌成果。
秦九韶,字道古,生活于南宋时期,自幼喜好数学,经过长期积累和苦心钻研,于公元1247年写成《数书九章》。
这部中世纪的数学杰作,在许多方面都有创造,其中求解一次同余组的“大衍求一术”和求高次方程数值解的“正负开方术”,更是具有世界意义的成就。
这里主要介绍秦九韶对一次同余论的伟大贡献。
秦九韶在《数书九章》中明确地系统地叙述了求解一次同余组的一般计算步骤。
秦的方法,正是前述的剩余定理。
我们知道,剩余定理把一般的一这些数起名叫“乘率”,并且在《数书九章》卷一“大衍总术”中详载了计算乘率的方法——大衍求一术”。
在秦九韶那个时代,计算仍然使用算筹。
秦九韶在一个小方盘上,右上布置奇数g,右下布置定数a,左上置1(他叫它做“天元1”),然后在右行上下交互以少降多,所得商数和左上(或上),直到右上方出现1为止。
下页就是秦九韶的一般筹算图式,右边是一个数字例子(g=20,a=27,k=c4=23)。
秦九韶在《数书九章》中采集了大量例题,如“古历会积”、“积尺寻源”、“推计土功”、“程行计地”等等,广泛应用大衍求一术来解决历法、工程、赋役和军旅等实际问题。
在这些实际问题中,模数a i并不总是两两互素的整数。
秦九韶区分了“元数”(a i是整数)、“收数”(a i是小数)、“通数”(a i是分数)等不同情形,并且对每种情形给出了处理方法。
“大衍总术”把“收数”和“通数”化成“元数”的情形来计算,而对于元数不两两互素的情形,给出了可靠的程序,适当选取那些元数的因子作定数而把问题归结为两两互素的情形。
所有这些系统的理论,周密的考虑,即使以今天的眼光看来也很不简单,充分显示出秦九韶高超的数学水平和计算技巧。
秦九韶小时曾跟随他父亲到南宋京城杭州,向太史局(主管天文历法的机构)的官员学习天文历法,“大衍求一术”很可能就是他总结天文历法计算上元积年方法的结果。
但是“大衍求一术”似乎没有为他同时代的人所充分理解。
明中叶以后几乎失传。
一直到清代“大衍求一术”又重新被发掘出来,引起了许多学者(张敦仁、李锐、骆腾风、黄宗宪等)的兴趣。
他们对“大衍求一术”进行了解释、改进和简化,其中黄宗宪《求一术通解》对模数非两两互素的情形给出了更加简明的方法,但是时代已是晚清。
从《孙子算经》“物不知数”题到秦九韶的“大衍求一术”,我国古代数学家对一次同余式的研究,不仅在中国数学史上而且在世界数学史上占有光荣的地位。
在欧洲,最早接触一次同余式的,是和秦九韶同时代的意大利数学家斐波那契(1170~1250),他在《算法之书》中给出了两个一次同余问题,但是没有一般的算法。
整个水平没有超过《孙子算经》。
直到十八、十九世纪,大数学家欧拉(1707~1783)于公元1801年对一般一次同余式进行了详细研究,才重新获得和秦九韶‘大衍求一术”相同的定理,并且对模数两两互素的情形,给出了严格证明。
欧拉和高斯事先并不知道中国人的工作。
公元1852年英国传教士伟烈亚力(1815~1887)发表《中国科学摘记》,介绍了《孙子算经》物不知数题和秦九韶的解法,引起了欧洲学者的重视。
1876年,德国马蒂生(1830~1906)首先指出孙子问题的解法和高斯方法一致,当时德国著名数学史家康托(1829~1920)看到马蒂生的文章以后,度评价了“大衍术”,并且称赞发现这一方法的中国数学家是“最幸运的天才”。
直到今天,“大衍求一术”仍然引起西方数学史家浓厚的研究兴趣。
如1973年,美国出版的一部数学史专著《十三世纪的中国数学》中,系统介绍了中国学者在一次同余论方面的成就,作者力勃雷希(比利时人)在评论素九韶的贡献的时候说道:“秦九韶在不定分析方面的著作时代颇早,考虑到这一点,我们就会看到,萨顿称秦九韶为‘他那个民族’,是毫不夸张的。
”印度学者对一次同余论也有过重要贡献。
从公元6世纪到12世纪,他们发展了一种称为“库塔卡”的算法,用来求解和一次同余式等价的不定方程组。
“库塔卡”法出现在孙子算法之后,印度数学家婆罗门芨多(七世纪)、摩柯吠罗(九世纪)等人的著作中,都有和物不知数题相同的一次同余问题。
这当然不是要借此断言“库塔卡”法一定受到了孙子算法的影响,但是有人(如万海依等)硬说中国的“大衍求一”来源于“库塔卡”,就是毫无根据的妄说了。
万海依居然把中国算法中数码从左到右横写作为“大衍术”受印度影响的重要根据。
大家知道,中国古代至迟从春秋战国时期就开始使用算筹记数,我们今天还可以从现存的公元前三世纪的货币上看到这种从左到右的记数方法。
由此可见,万海依的论点多么荒唐可笑。
中国古代数学家对一次同余论的研究有明显的独创性和继承性,“大衍求一术”在世界数学史上的崇高地位是毋容置疑的,正因为这样,在西方数学史著作中,一直公正地称求解一次同余组的剩余定理为“中国剩余定理”。