【数论4】求解线性同余方程和方程组
目录
前言
线性同余方程
扩展欧几里得算法求逆元
中国剩余定理
前言
今天要讲的内容是扩展欧几里得定理的简单应用(求解线性同余方程),中国剩余定理(多元线性同余方程组求解)
线性同余方程
先来讲一下什么是线性同余方程,线性同余方程和一次方程是等同的,只不过线性同余方程是在模意义下,比如下面这个方程:
a * x mod m = b
要求解x
,首先要将模意义下转化成非模意义下:
a * x = b - k * m
移项:
a * x + k * m = b
是不是和扩展欧几里得算法特别像,所以这个方程可以使用扩展欧几里得算法来求解,但是有个前提:
b
必须是gcd(a, m)
的整数倍,当b
不是gcd(a, m)
的整数倍的时候就不可以用扩展欧几里得算法求解,或者说无解。
因此我们只需要求出利用扩展欧几里得算法求出x, k
最后成比例变换就可以了,是不是很简单(代码我没来得及写QAQ),大家凑合看吧。
扩展欧几里得算法求逆元
我们知道快速幂配合费马小定理是可以求逆元的,但是那仅限于模m
是质数的情况,而要利用欧拉函数实现一般情况下求逆元的话显然太复杂,而且效率也不高,所以一般情况下m
不是质数时我们选择使用扩展欧几里得算法求逆元。
我们知道满足这样的式子就可以说b
和b^-1
互为逆元。我们将逆元b-1
设为x
得到
将模意义下转化成一般意义下。
因为逆元存在的条件就是b
和m
互质,所以gcd(b, m) = 1
,如上式子是必定满足的,随后就可以使用扩展欧几里得算法求x
(不过不要忘记最后要再将x
转化回模意义下哦)
中国剩余定理
中国剩余定理是用来解决这样的问题的,给定一个线性同余方程组(其中m1, m2, ... , mn
两两互质):
x = a1 mod m1
x = a2 mod m2
.
.
.
x = an mod mn
要求x
,我们设
M = m1 * m2 * ... * mn
设
M1 = M/mi
因为M1
与m1
是互质的,所以M1
必定存在m1
下的逆元m1^-1
,同理,其他项也是一样
最终我们可以得到
x = a1 * M1 * M1-1 + a2 * M2 * M2-2 + ...
具体如何推导的我不得而知,但是我们可以判断其是否正确,当x mod m1
时:因为m2, m3, m4...
均包含m1
,所以后面的所有项结果都是0
第一项的M1 * M1-1
在模m1
的意义下结果是1
,所以x mod m1 = a1
。