【科技】 扩展中国剩余定理(exCRT)

尽管这玩意叫扩展中国剩余定理,但它跟CRT一点关系没有,你只需要会exgcd即可。

考虑这样的一组模线性同余方程组:

{xb1(moda1)xb2(moda2)     xbn(modan)

注意与前面不同的是 ai 不一定满足两两互质

这时候再套CRT肯定是不行了(因为 Miai 不一定互质,导致逆元可能不存在),这时就要考虑exCRT。

CRT的基本思想是吧若干个同余方程合并为一个等价的同余方程,不难想到其实只需要考虑怎么把两个方程合并为一个即可。

假设现在有这样两个方程:

{xb1(moda1)xb2(moda2)

不难发现这个方程组可以改写成这样:

{x=b1+k1a1x=b2+k2a2

于是有 k1a1k2a2=b2b1,此时只有 k1k2 是未知量,很容易判断是否有解(裴蜀定理),如果有解那么先exgcd求出 k1a1k2a2=d 的一组特解 K1K2,那么整个解集就可以得到了,这里只取其中的一组:

{k1=K1b2b1dk2=K2b2b1d

那么 x=b1+K1a1b2b1d(当然也满足x=b2+K2a2b2b1d),而后面的模数显然应该取一个完全剩余系的大小 lcm(a1,a2),于是我们成功的把两个方程合并成了一个:

xb1+K1a1b2b1d(modlcm(a1,a2))

那么这样逐个合并下去,直到只剩一个方程即为答案(或中途不满足 gcd(ai,ai+1)|(bi+1bi) 报告无解)。

posted @   wapmhac  阅读(37)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下
点击右上角即可分享
微信分享提示