中国剩余定理(新)

定理内容

中国剩余定理(孙子定理),这是用来解出一堆线性同余方程组同一解的定理,通常会给出一对同余方程。如下,其中任意两个 mi 互质,求解 x

xa1(modm1)xa2(modm2)xa3(modm3)xan(modmn)

在定理中设有几个变量 M,Mi,ti,对于他们有关系

M=m1×m2×m3××mnMi=M÷miMi×ti1(modmi)

可以看出,其中 tiMi 关于 mi 的逆元。而 x

x=i=1nai×Mi×ti

证明

由上面我们可以知道,中国剩余定理是通过构造来得到一组解, 因此只需要证明可行性即可。

你可以尝试带入进去。比如这里带入第一个式子 xa1(modm1)。因为 x 中除了第 1 项, 其他所有的 ai×Mi×ti 中的 Mi 里面都有 m1 这个因子,那么其他项就可以被取模 m1 给完美消掉,只剩下第一项 a1×M1×t1

又因为 Mi×ti1(modm)i, 那么M1 * t1 在取模 m1 下就为 1 ,那么就只剩下 a1,符合等式 1,对于其他的等式同理, 这就说明,这是一个正确解。

关于 ti 一定有解。
因为

Mi×ti1(modmi)Mi=M÷migcd(mi,mj)=1,ij

通过裴蜀定理可得式子

Mi×x+mi×y=1

Mi×ti1(modmi),可以化成等式 Mi×ti+mi×y=1
那么 Mi×x+mi×y=1 中的 x 就是 tiMi×x+mi×y=1 存在,等式Mi×ti+mi×y=1 就一定存在,x 一定有解,即 ti 一定有解,那么 ti 就一定可以通过 exgcd 求出。

值得一提的是 M 是所有 mi 的乘积,那么通解应该也就知道了,即 x=x0+k×M
x 加上 kM 不影响每个 mi 取余,它还是 ai,也就都是合法解。(这里有多组解的原因也是, 有 n 个式子但能找出来 n+1 个未知数(把同余方程列乘等式),因此有无数解)

所以最小正整数解就是用代码就是 (x % M + M) % M

posted @   blind5883  阅读(34)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
点击右上角即可分享
微信分享提示