合并同余方程组

0 前言

本篇由本人原博客搬运至此。

感谢 R_rank_Pyramid 对于 2 部分的指正。

1 导语

同余方程组,是形如

xx1(modp1) x ≡ x 1 ( mod p 1 )

xx2(modp2) x ≡ x 2 ( mod p 2 )

... . . .

xxn(modpn) x ≡ x n ( mod p n )

的方程组。

p1,p2,...,pn p 1 , p 2 , . . . , p n 互质的时候,我们可以使用中国剩余定理。但如果他们不互质呢?

2 裴蜀定理与扩展欧几里得算法

这里先介绍一下裴蜀定理与扩展欧几里得算法作为铺垫

裴蜀定理:对于不完全为 0 0 的非负整数 a,b a , b (a,b) ( a , b ) 表示 a,b a , b 的最大公约数。则必然存在整数对 x,y x , y ,使得

(a,b)=ax+by ( a , b ) = a x + b y

具体证明略。

扩展欧几里得算法则是对这个方程求解的算法。

3 合并同余方程组

比如我们先合并前两个方程。

xx1(modp1) x ≡ x 1 ( mod p 1 )

xx2(modp2) x ≡ x 2 ( mod p 2 )

根据余数的定义,我们可以将方程改写为

x=p1u+x1 (uZ)(1) x = p 1 u + x 1   ( u ∈ Z ) ( 1 )

x=p2v+x2 (vZ)(2) x = p 2 v + x 2   ( v ∈ Z ) ( 2 )

p1up2v=x2x1(3) p 1 u − p 2 v = x 2 − x 1 ( 3 )

根据裴蜀定理,令 p0=(p1,p2) p 0 = ( p 1 , p 2 )

x2x1≢0(modp0) x 2 − x 1 ≢ 0 ( mod p 0 ) ,方程无解。

x2x10(modp0) x 2 − x 1 ≡ 0 ( mod p 0 ) ,则可化为

p1p0up2p0v=x2x1p0(4) p 1 p 0 u − p 2 p 0 v = x 2 − x 1 p 0 ( 4 )

现将方程 (4) ( 4 ) 改为 p1p0up2p0v=1 p 1 p 0 u − p 2 p 0 v = 1

根据扩展欧几里得算法可得特解 u0,v0 u 0 , v 0

然后将解乘上 x2x1p0 x 2 − x 1 p 0

则可得 u1=u0×x2x1p0 u 1 = u 0 × x 2 − x 1 p 0 v1=v0×x2x1p0 v 1 = v 0 × x 2 − x 1 p 0

则方程 (3) ( 3 ) 的通解为

u=u1p2p0t,v=v1+p1p0t (tZ) u = u 1 − p 2 p 0 t , v = v 1 + p 1 p 0 t   ( t ∈ Z )

任选一个代入方程 (1) ( 1 ) (2) ( 2 ) 中,比如我代入 (1) ( 1 ) ,则

x=p1(u1p2p0t)+x1=p1p2p0t+p1u1+x1 x = p 1 ( u 1 − p 2 p 0 t ) + x 1 = − p 1 p 2 p 0 t + p 1 u 1 + x 1

因为 (a,b)×[a,b]=ab ( a , b ) × [ a , b ] = a b ,所以 [p1,p2]=p1p2p0 [ p 1 , p 2 ] = p 1 p 2 p 0

则前两个同余方程可以化为

xx(mod[p1,p2]) x ≡ x ′ ( mod [ p 1 , p 2 ] )

的形式。以此类推即可。

你可能感兴趣的:(NOIP,数论)