[数论]扩展中国剩余定理(EX-CRT)
Posted zero_orez6
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[数论]扩展中国剩余定理(EX-CRT)相关的知识,希望对你有一定的参考价值。
前言
CRT和EX-CRT目的都是为了解决同余的问题,但他们在方法上有着本质的区别,这篇文章主要用数学归纳法来证明EX-CRT。
问题
给你 n n n个 a , m a,m a,m,需要你求出最小的x满足下面的同余式
{ x ≡ a 1 ( m o d m 1 ) x ≡ a 2 ( m o d m 2 ) . . . . . . x ≡ a n ( m o d m n ) \\begin{cases}x\\equiv a_1(mod\\ m_1)\\\\x\\equiv a_2(mod\\ m_2)\\\\......\\\\x\\equiv a_n(mod\\ m_n)\\end{cases} ⎩⎪⎪⎪⎨⎪⎪⎪⎧x≡a1(mod m1)x≡a2(mod m2)......x≡an(mod mn)
证明过程
我们先看前两个式子
{ x ≡ a 1 ( m o d m 1 ) x ≡ a 2 ( m o d m 2 ) \\begin{cases}x\\equiv a_1(mod\\ m_1)\\\\x\\equiv a_2(mod\\ m_2)\\end{cases} {x≡a1(mod m1)x≡a2(mod m2)
由上面两个式子我们可得
x
=
k
1
∗
m
1
+
a
1
x=k_1*m_1+a_1
x=k1∗m1+a1(以下所有
k
k
k皆为常数)
x
=
k
2
∗
m
2
+
a
2
x=k_2*m_2+a_2
x=k2∗m2+a2
联立上面两个式子可得
k 1 ∗ m 1 + a 1 = k 2 ∗ m 2 + a 2 k_1*m_1+a_1=k_2*m_2+a_2 k1∗m1+a1=k2∗m2+a2
移项得:
k 1 ∗ m 1 − k 2 ∗ m 2 = a 2 − a 1 k_1*m_1-k_2*m_2=a_2-a_1 k1∗m1−k2∗m2=a2−a1
仔细观察以上式子,大家有没有联想到什么呢
是不是很像扩欧的式子 a ∗ x + b ∗ y = c a*x+b*y=c a∗x+b∗y=c。
所以我们可以用扩欧求出 k 1 k_1 k1,再用 k 1 k_1 k1求出式子的特解 x 0 x_0 x0.
x = x 0 + l c m ( m 1 , m 2 ) ∗ k x=x_0+lcm(m_1,m_2)*k x=x0+lcm(m1,m2)∗k
∴ x ≡ x 0 ( m o d l c m ( m 1 , m 2 ) \\therefore x \\equiv x_0(mod \\;lcm(m_1,m_2) ∴x≡x0(modlcm(m1,m2)
再将上面的同余式与第三个同余式及以下同余式合并,求出最小非负整数 x x x.
注意
1. 1. 1.虽然EX-CRT本身无法判断是否有解,但在用扩欧求出常数 k k k时,对于式子 a ∗ x + b ∗ y = c a*x+b*y=c a∗x+b∗y=c,只有当 g c d ( a , b ) gcd(a,b) gcd(a,b)能够整除 c c c时,此式子才有解。
2. 2. 2.注意处理负数 ( x (x (x% m + m ) m+m) m+m)% m m m。
例题
这个博主太懒了,待他整理整理再放。
以上是关于[数论]扩展中国剩余定理(EX-CRT)的主要内容,如果未能解决你的问题,请参考以下文章