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