前置技能点要求懂得基础的数论知识和扩展欧几里德算法
有关于前置技能点的东西不会就别问我了。
写挂哪里请评论戳我。
进入正题
我们要合并同余方程
{x≡r1(modm1)x≡r2(modm2) { x ≡ r 1 ( mod m 1 ) x ≡ r 2 ( mod m 2 )
即:
{x=n1×m1+r1x=n2×m2+r2 { x = n 1 × m 1 + r 1 x = n 2 × m 2 + r 2
则:
n1×m1+r1=n2×m2+r2⇔n1×m1−n2×m2=r2−r1⋯⋯(1) n 1 × m 1 + r 1 = n 2 × m 2 + r 2 ⇔ n 1 × m 1 − n 2 × m 2 = r 2 − r 1 ⋯ ⋯ ( 1 )
考虑这样一个不定方程
ax+by=(a,b)⇔a(a,b)+b(a,b)=1⇔ax≡(a,b)(modb) a x + b y = ( a , b ) ⇔ a ( a , b ) + b ( a , b ) = 1 ⇔ a x ≡ ( a , b ) ( mod b )
当其存在特解 (x0,y0) ( x 0 , y 0 ) 时,通解 (x,y) ( x , y ) 如下:
{x=x0+K×b(a,b)y=y0+K×a(a,b)K∈Z { x = x 0 + K × b ( a , b ) y = y 0 + K × a ( a , b ) K ∈ Z
在 (1) ( 1 ) 中,取 (m1,m2)为(x,y) ( m 1 , m 2 ) 为 ( x , y ) , (n1,n2)为(a,b) ( n 1 , n 2 ) 为 ( a , b ) .
这样一来为了使得存在整数解 (m1,m2) ( m 1 , m 2 ) ,需使 gcd(n1,n2)|(r2−r1) gcd ( n 1 , n 2 ) | ( r 2 − r 1 ) .
因此可以设
{g=gcd(n1,n2)r=r2−r1 { g = gcd ( n 1 , n 2 ) r = r 2 − r 1
则有(把不定方程先弄成同余方程)
n1g×m1≡rg(modn2g)⇔m1≡rg×(n1g)−1(modn2g) n 1 g × m 1 ≡ r g ( mod n 2 g ) ⇔ m 1 ≡ r g × ( n 1 g ) − 1 ( mod n 2 g )
取
K=rg×(n1g)−1 K = r g × ( n 1 g ) − 1
则(相当于又把同余方程化为不定方程)
k1=n2g×y+K k 1 = n 2 g × y + K
将 k1 k 1 带入原方程组,则
{x=n1×(n2g×y+K)+r1x=×n1n2g+r2 { x = n 1 × ( n 2 g × y + K ) + r 1 x = × n 1 n 2 g + r 2
化简得
x=n1K+r1(modn1n2g)⇔x≡n1×rgcd(n1,n2)×(n1gcd(n1,n2))−1+r1(modn1n2gcd(n1,n2)) x = n 1 K + r 1 ( mod n 1 n 2 g ) ⇔ x ≡ n 1 × r gcd ( n 1 , n 2 ) × ( n 1 gcd ( n 1 , n 2 ) ) − 1 + r 1 ( mod n 1 n 2 gcd ( n 1 , n 2 ) )
其中 n1n2g n 1 n 2 g 即是 n1,n2 n 1 , n 2 的最小公倍数。
多个方程你就两个两个合并一下就好了…吧。