扩展中国剩余定理(扩展CRT)详解

今天在xsy上翻题翻到了一道扩展CRT的题,就顺便重温了下(扩展CRT模板也在里面)

中国剩余定理是用于求一个最小的x,满足xci(modmi)

正常的CRT有一个微小的要求,就是i,j(mi,mj)=1

在某些情况下,这个式子无法被满足,这个时候就要用扩展CRT来求解了。

 

我们先假设我们只有两条方程要被求解,它们分别是:

{xc1(modm1)xc2(modm2)

我们考虑将同余去掉,就变成了:

{x=c1+m1k1x=c2+m2k2

联立一波,得:

c1+m1k1=c2+m2k2

m1k1=(c2c1)+m2k2

若该方程存在解,则有(m1,m2)|(c2c1),否则无解

下面令d=(m1,m2)

我们对等式两边全部除以d,得:

m1dk1=c2c1d+m2dk2

经过简单变式,得:

m1dk1c2c1d(modm2d)

没错,我们成功消掉了k2

我们将m1d移项到等式右侧,得:

k1inv(m1d,m2d)×c2c1d(modm2d)

其中inv(x,y)表示模y义下x的乘法逆元

重新将该式子变回等式,得:

k1=inv(m1d,m2d)×c2c1d+ym2d

该式子已经化简到尽了,考虑重新代入回最初的式子。

k1代入x=c1+m1k中,得:

xinv(m1d,m2d)×c2c1d×m1+c1(modm1m2d)

至此,求两条式子的扩展CRT已经讲完了

如果方程有多条怎么办:我们做n1次的两条式子的CRT合并就可以了。

 

posted @   AlphaInf  阅读(1195)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
点击右上角即可分享
微信分享提示