线性同余方程组

线性同余方程和中国剩余定理就不多说了。

线性同余方程组的求解可以分解为求若干个线性同余方程。比如,对于线性同余方程组:
2x ≡ 2 (mod 6)
3x ≡ 2 (mod 7)
2x ≡ 4 (mod 8 )
首先求解第一个方程,得到x ≡ 1 (mod 3),于是令x = 3k + 1,第二个方程就变为:
9k ≡ −1 (mod 7 )
解得k ≡ 3 (mod 7 )。于是,再令k = 7l + 3,第三个方程就可以化为:
42l ≡ −16 (mod 8 )
解出:l ≡ 0 (mod 4 ),即 l = 4m。代入原来的表达式就有 x = 21(4m) + 10 = 84m + 10,即解为:
x ≡ 10 (mod 84 )
对于一般情况下是否有解,以及解得情况,则需用到数论中的中国剩余定理。

模仿中国剩余定理的做法来解决这个问题。

如果只有一个方程:x mod a0 = r0。那么,显然x的最小正值为a0+r0。

根据模的性质,我们容易得知,x+a0*k均为该方程的解。(k为正整数)

如果多了一个方程:x mod a1 = r1。那么,我们为了使之间求得的解x0=a0+r0能够同时满足这两个方程,只好令x0=x0+a0*k,显然这样做x0仍然满足第一个方程。这时候我们相当于要求解这样一个模方程:(x0+a0*k) mod a1 = r1。这个方程我们可以用拓展欧几里得算法求得k的值。这样,只要令x0变成x0+a0*k,就能同时满足这两个方程了。

推而广之,对于方程x mod ai = ri,假如我们之前求得的解为X,那么我们要令X变成X+k*LCM(a0,a1,a2…ai-1),使得它满足这个方程。k我们可以用拓展欧几里得算法求解,LCM可以在每一次更新,这样就能在接近O(klogk)的时间复杂度内解决这个问题了。

无解的判断:若某个(X+k*LCM) mod ai = ri无整数解,那么原方程组无解。

posted @ 2014-01-03 10:10  hsuppr  阅读(670)  评论(0编辑  收藏  举报