中国剩余定理

定理:

    设 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=m1m2mn,Mi=mim,1in,那么下列模线性方程组
( ∗ ) = { 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} ()=xb1(mod  m1)xb2(mod  m2)                           xbn(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\ ) Miyi1mod( 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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值