Night的数学杂谈——模数不互质的CRT

本文介绍了如何通过扩展欧几里德算法合并多个同余方程的方法,详细讲解了从不定方程到同余方程的转换过程,并最终求解合并后的同余方程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前置技能点要求懂得基础的数论知识和扩展欧几里德算法
有关于前置技能点的东西不会就别问我了。
写挂哪里请评论戳我。

进入正题

我们要合并同余方程

{xr1(modm1)xr2(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+r2n1×m1n2×m2=r2r1(1)n1×m1+r1=n2×m2+r2⇔n1×m1−n2×m2=r2−r1⋯⋯(1)

考虑这样一个不定方程

ax+by=(a,b)a(a,b)+b(a,b)=1ax(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)KZ{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)|(r2r1)gcd(n1,n2)|(r2−r1) .

因此可以设

{g=gcd(n1,n2)r=r2r1{g=gcd(n1,n2)r=r2−r1

则有(把不定方程先弄成同余方程)

n1g×m1rg(modn2g)m1rg×(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)xn1×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 的最小公倍数。
多个方程你就两个两个合并一下就好了…吧。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值