定理:
设
m
1
,
m
2
,
⋅
⋅
⋅
,
m
n
m_{1},m_{2},···,m_{n}
m1,m2,⋅⋅⋅,mn,是两两互素的n个正整数,记
m
=
m
1
m
2
⋅
⋅
⋅
m
n
,
M
i
=
m
m
i
,
1
≤
i
≤
n
m=m_{1}m_{2}···m_{n},M_{i}=\frac{m}{m_{i}},1\leq i \leq n
m=m1m2⋅⋅⋅mn,Mi=mim,1≤i≤n,那么下列模线性方程组
(
∗
)
=
{
x
≡
b
1
(
m
o
d
m
1
)
x
≡
b
2
(
m
o
d
m
2
)
⋅
⋅
⋅
x
≡
b
n
(
m
o
d
m
n
)
(*)=\begin{cases}\\ &x\equiv b_{1} (mod\ \ m_{1}) \\ &x\equiv b_{2} (mod\ \ m_{2}) \\ &\ \ \ \ \ \ \ \ \ · \\ &\ \ \ \ \ \ \ \ \ · \\ &\ \ \ \ \ \ \ \ \ · \\ &x\equiv b_{n} (mod\ \ m_{n}) \\ \end{cases}
(∗)=⎩⎪⎪⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎪⎪⎧x≡b1(mod m1)x≡b2(mod m2) ⋅ ⋅ ⋅x≡bn(mod mn)
的解为
x
0
≡
(
b
1
M
1
y
1
+
b
2
M
2
y
2
+
b
3
M
3
y
3
+
⋅
⋅
⋅
+
b
n
M
n
y
n
)
m
o
d
m
x_0\equiv (b_1M_1y_1+b_2M_2y_2+b_3M_3y_3+···+b_nM_ny_n)mod \ m
x0≡(b1M1y1+b2M2y2+b3M3y3+⋅⋅⋅+bnMnyn)mod m,其中,
y
i
y_i
yi是
M
i
y
i
≡
1
m
o
d
(
m
i
)
M_iy_i\equiv 1 mod(\ m_i\ )
Miyi≡1mod( mi )的解,
i
=
1
,
2
,
3
,
⋅
⋅
⋅
,
n
i=1,2,3,···,n
i=1,2,3,⋅⋅⋅,n。
证明略。(可参考特殊情况:https://blog.csdn.net/weixin_42373330/article/details/82114105)
程序实现:
#define ll long long
ll extend_gcd(ll a, ll b, ll& x, ll& y)
{
if(b==0)
{
x=1;
y=0;
return a;
}
ll t=extend_gcd(b,a%b,y, x);
y-=(a/b)*x;
return t;
}
ll ChinaRemainder(int m0[], int b[])
{
ll d, x, y, n, m=1, a = 0;
for(int i=1;i<= n;i++) m=m*m0[i];
for(int i=1;i<=n;i++)
{
ll MM=m/m0[i];
extend_gcd(MM,m0[i], x, y);//求MM关于m0[i]的逆元yi
a=(a+b[i]*m0[i]*x)%m;
}
return a;
}