浅谈同余方程的求解与中国剩余定理
本篇随笔简单讲解一下信息学奥林匹克竞赛中数论部分的内容——同余方程的求解。顺便讲一下中国剩余定理。
同余方程的概念
关于同余和同余式的基本概念,如果还是了解的不清楚的话,请翻看本蒟蒻的这篇博客,讲解的非常详细:
那么,同余方程就是同余式里加了一个需要我们求解的未知数。
比如,一种同余方程(就是我们首先要讲的一次同余方程)长成这个样子:
\[ ax\equiv b\,\,\,(mod\,\,p) \]
线性同余方程及其求解
未知数指数为1的同余方程叫做线性同余方程,它的通式可以被表示为:
\[ ax\equiv b\,\,\,(mod\,\,p) \]
我们可以用扩展GCD求解线性同余方程。
如果对于扩展GCD还不太明白的小伙伴,请移步本蒟蒻的这篇博客,讲解的也比较清晰:
那么,我们知道扩展GCD可以被用来求解形如\(ax+by=m(gcd(a,b)|m)\)这样的方程。我们只需要把这个同余方程式变成这样的普通等式即可。
因为\(ax\equiv b\,\,\,(mod\,\,p)\)等价于\(ax-b\)可以被\(p\)整除,那么可以设\(ax-b\)是\(p\)的\(-y\)倍,那么就有:
\[ (ax-b)\times(-y)=p \]
经过移项变形,得到:
\[ ax+py=b \]
那么我们就可以通过扩展GCD来求一组特解\(x,y\),其中的\(x\)就是我们需要的答案。
注意,根据裴蜀定理,这个同余方程有解的条件应该是\(b\)是\(\gcd(a,p)\)的倍数。
同余方程组与中国剩余定理
中国剩余定理相信大家都听说过,也叫做孙子定理,是我国古代数学的结晶之一(这个玩意真的是纯国产)(推销一下爱国情怀)。
中国剩余定理是用来求解:一次同余方程组的。
为了更好地理解中国剩余定理,我们来看一波历史:
从前有一本叫《孙子算经》的书,里面提到了一道这样的问题:
有物不知其数,三三数之剩二,五五数之剩三,七七数之剩二。问物几何?
大意: 一个整数除以三余二,除以五余三,除以七余二,求这个整数。
那么这个问题可以被抽象为一个同余方程组:
\[ \begin{equation} \left\{ \begin{array}{**lr**} x\equiv2\,\,\,(mod\,\,3)& \\ x\equiv3\,\,\,(mod\,\,5) & \\ x\equiv2\,\,\,(mod\,\,7) & \end{array} \right. \end{equation} \]
那么,将它扩展一下,我们可以有很多个方程,都形如\(x\equiv a_i\,\,\,(mod\,\,m_i)\)。将其构造成一个方程组,就会有一个线性同余方程组(当我没说)。
假设一个数\(M=\prod^n_{i=1}m_i\),那么设\(M_i=M/m_i\),即\(M_i\)表示所有模数中除了第\(i\)个模数的乘积。设\(t_i\)为\(M_i\)模\(m_i\)意义下的逆元。那么中国剩余定理就是:
上述方程式有解,其通解为:
\[ x=\sum^n_{i=1}{a_it_iM_i} \]