孙子算法总结(汇总4篇)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
孙子算法总结第1篇
下面分析一下孙子算经的算法,一个数满足除以3余2,除以5余3,除以7余2.那么我们先假设这个数N =
A+B+C。
如果A除以3余2(A≡2(mod3))且B和C是3的倍数。
B除以5余3(B≡3(mo d5))且A,C都是5的倍数,C除以7余2(C≡2(mod7))且A,B都是7的倍数。
那么N 就是我们要找的数。
总结下来,A应该满A≡2(mod3)且A是5和7的公倍数;B≡3(mo d5),且B是3和7的公倍数;C≡2(mod7),且C是3和5的公倍数。
我们设A=k1*35(35是5和7的最小公倍数,则k1*35可以表示5和7的所有公倍数,k1是正整数)B=k2*21,C =k3*15;再取合适的k1,k2,k3的值使得A≡2(mod3),B≡3(mod5),C≡2(mod7).可得A=140,B=63,C=30.则N=233,又因为3,5,7的最小公倍数是105,在减去105得23.故所得最小整数为23,N=23+K*105都满足条件。
我们可以将上诉问题改为求一次同余方程的形式即:
K1*35≡1(mod3)求出K1*35的最小值为70,k1=2;
K2*21≡1(mod5)求出K2*21的最小值为21,k2=1;
K3*15≡1(mod7)求出K3*15的最小值为15,k3=1;
我们想得到A模3余1题中要求余2,所以用70再乘以2就得到A,这时A模3就余2了,同理用21*3,15乘以2。
再相加得到N=2*35*2+1*21*3+1*15*2=233。
233所在的模105的剩余类都满足条件即N=23+K*105.
孙子算法总结第2篇
这是一个古老的数论问题,设此数为 x ,即为 x\equiv2\ (mod\ 3),x\equiv3\ (mod\ 5),x\equiv2\ (mod\ 7) 线性同余方程组。
模数满足两两互质,且在 M=[3,5,7]
范围内有唯一解。
我们先构造一个解 X ,令其由三部分组成 X=X_1+X_2+X_3\\ 令 X_1=5\times 7\times x_1 且 X_1\equiv 2\ (mod\
3) ,以此类推,即每个部分恰被其他模数整除余零,对一个模数有余
X=35x_1+21x_2+15x_3\\ 则 X 是通解,同时满足三个同余方程,先求 x_1 35x_1\equiv 2\ (mod\ 3)\\ 这里就看出互质的重要性了,由于 3,5,7 都是质数,那么 3\perp35 ,所以x_1 有唯一解,可利用x_1=1 ,同理求出 x_2=3,x_3=2 ,则 X=128 。
根据 \boxed{引理2} ,解在模 M 意义下唯一,所以最小非负解为 128\ mod\
[3,5,7]=128\ mod\ 105=23\\
对于模数两两互质的方程组 \left\{\begin{array}\ x\equiv a_0\ (mod\ m_0)\\ x\equiv a_1\ (mod\ m_1)\\ \ \ \ \ \ \ \ \ \ \vdots\\x\equiv a_n\ (mod\ m_n)\end{array}\right.\\ 根据
\boxed{引理2} ,在模 M 意义下有唯一解 M=m_0m_1\cdots m_n\\则同样可构造通解
X=X_1+X_2+\cdots +X_n ,对于其中任意 X_i 有\left\{\begin{array}\
M_i=\frac{M}{m_i}\\X_i=M_ix_i\\X_i\equiv a_i\ (mod\
m_i)\end{array}\right.\\目标是构造出其中的 X_i ,根据3 ,任意模数两两互质 M_i\perp m_i\\ 所以存在乘法逆元 y_i\equiv M_i^{-1}\ (mod\ m_i)\\ 则 X_i 即可构造出来 \ \ \ \ \ \ x_i\equiv a_iy_i\ (mod \ m_i)\\\Rightarrow X_i\equiv a_iM_iy_i\ (mod \ m_i)\\ 通解为
X\equiv\sum a_iM_iy_i\ (mod\ M)\\这里可以验证一下,对于每个部分
a_iM_iy_i ,若模其他 m 则将 M_i 整除余零,当且仅当模 m_i
构成乘法逆元,只留下一个 a_i ,则所有部分相加即可满足整个方程组的需求。
显然,但凡存在两个模数不互质,则相应的 M_i^{-1}
乘法逆元就构造不出来,也就得不到通解,只能两个两个的单独算,不断的合并直到所有模数都互质。
针对模不互质的情形,仅两个方程联立还是能得出一个通解的,详见
设若存在x_i\ne x_j都是方程组的解,则有\left\{\begin{array}\ x_i\equiv x_j\ (mod\ m_0)\\ x_i\equiv x_j\ (mod\ m_1)\\ \ \ \ \ \ \ \ \ \ \vdots\\x_i\equiv x_j\ (mod\
m_n)\end{array}\right.\\根据 \boxed{引理2} 立刻得到\left\{\begin{array}\ x_i\equiv x_j\ (mod\ M)\\M=m_0m_1\cdots m_n\end{array}\right.\\说明方程组在模的最小公倍数 M
范围内有唯一解。
以上,解的存在性和解的唯一性共同构成了中国剩余定理Chinese Remainder Theorem最通用的版本,即模数两两互质,方程组必有解,且在模数总乘积范围内唯一。
至于模不互质时,解也是可能存在的,解存在的充要条件请看
孙子算法总结第3篇
解决了线性同余方程,试看更复杂的带幂次的同余方程a_nx^n+a_{n-1}x^{n-
1}+\cdots+a_0\equiv0\ (mod\ m)\\根据m
分解为m=p_1^{\alpha_1}p_2^{\alpha_2}\cdots\\设
f(x)=a_nx^n+\cdots+a_0 ,根据8 ,若方程有解,设解的集合为 X ,则对于任意解 x\in X 有\left\{\begin{array}\ f(x)\equiv 0\ (mod\ p_1^{\alpha_1})\\ f(x)\equiv 0\ (mod\
p_2^{\alpha_2})\\ \ \ \ \ \ \ \ \ \ \ \vdots\end{array}\right.\\所以若 x 是原方程的解,则 x
是所有子方程 f(x)\equiv 0\ (mod\ p_i^{\alpha_i}) 的共同解
反过来,设若每个子方程有最小非负解,设 f(x)\equiv 0\ (mod\ p_1^{\alpha_1})
有最小非负解 y_1 且 f(x)\equiv 0\ (mod\ p_2^{\alpha_2}) 有最小非负解
y_2 ,以此类推,则有余数组合 \left\{ y_1,y_2,\cdots \right\}
满足线性同余方程组如下\left\{\begin{array}\ y\equiv y_1\ (mod\ p_1^{\alpha_1})\\
y\equiv y_2\ (mod\ p_2^{\alpha_2})\\ \ \ \ \ \ \ \ \ \ \ \vdots\end{array}\right.\\注意到模数
p_i^{\alpha_i} 两两互质,根据中国剩余定理,该方程组在模 m 意义下的解 y
必然存在,根据5 ,此解满足\left\{\begin{array}\ f(y)\equiv f(y_1)\equiv 0\ (mod\
p_1^{\alpha_1})\\ f(y)\equiv f(y_2)\equiv 0\ (mod\ p_2^{\alpha_2})\\ \ \ \ \ \ \ \ \ \ \
\vdots\end{array}\right.\\则 y 是所有子方程的共同解
将上式通过根据9 整理即可得到f(y)\equiv 0\ (mod\ m)\\所以,若 y
是子方程的共同解,则 y 也是原方程的解。
剩下的问题就是有多少这样的 y ,观察 \left\{ y_1,y_2,\cdots \right\}
构造的线性同余方程组,根据 \boxed{引理2} 可知不同的 y
对应不同的余数组合,亦即不同的余数组合与 y
之间构成一一映射(双射)。
表示为(前两个不仅是一一映射,而是全等):\boxed{原方程的解}\leftrightarrow\boxed{子方程的共同解}\leftrightarrow\boxed{子方程解的组合数}\\由此可以计算出,原方程解的个数恰为所有子方程解的组合数,设若任意子方程 f(x)\equiv 0\ (mod\ p_i^{\alpha_i}) 的解有 r_i 个,则原方程解的个数为 \left| X
\right|=\prod r_i\\由此可知,若存在某个子方程无解,则整个方程无解。
更多内容请看:
孙子算法总结第4篇
已知条件 \left. \begin{array}\ a\equiv b\ (mod\ m)\\a\equiv b\ (mod\ n)\end{array} \right\}\\ 根据\left.\begin{array}\ a-b=k_1m\\a-b=k_2n\end{array}\right\}\Rightarrow k_1m=k_2n\\ 设 (m,n)=d ,则 m=dm',n=dn' ,代入上式即可得到 k_1m'=k_2n'\\ 则 n'\mid k_1m' ,又
m'\perp n' ,根据2 可得 n'\mid k_1\\ 设 k_1=qn' ,代入 a-b=k_1m 得 a-
b=q\cdot\frac{mn}{d}=q·[m,n]\\ 则有 a\equiv b\ (mod\ [m,n]) ,引理如下
逆向也是可以证明的, lcm[m,n]=m'n'd ,根据8
可分解得到左边,这就属于题外话了。
这里我们小用一下
已知条件 \left\{\begin{array}\ a\equiv b\ (mod\ m_0)\\ a\equiv b\ (mod\ m_1)\\ \ \ \ \ \ \ \ \ \ \vdots\\a\equiv b\ (mod\ m_n)\end{array}\right.\\ 当 n=1 时,根据 \boxed{引理1} 有
a\equiv b\ (mod\ [m_0,m_1])\\ 设若 n=k 时,有 a\equiv b(mod[m_0,m_1,\cdots,m_k])\\
对于 n=k+1 ,设 M_k=[m_0,m_1,\cdots,m_k] ,则有 \left\{\begin{array}\ a\equiv b\ (mod\ M_k)\\ a\equiv b\ (mod\ m_{k+1})\end{array}\right.\\ 根据 \boxed{引理1} 有 a\equiv b\ (mod\ [M_k,m_{k+1}])\\ 根据6 [M_k,m_{k+1}]=[m_0,m_1,\cdots,m_{k+1}]\\ 综上,若
n=k 时成立,则 n=k+1 成立,可归纳为该引理对任意 n 成立
证毕。
篇首的原理“模最小公倍数范围内,任意不同数对各个模的余数组合不同”由此而来。