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