中国剩余定理
问题
解同余方程组

其中m1,m2,m3...mk 为两两互质的整数
求x的最小非负整数解
定理
令 即M是所有 mi 的最小公倍数
ti为同余方程的最小非负整数解
则有一个解为
通解为
特别的,最小非负整数解为(x mod M+M) mod M
证明
因为
是除mi之外的所有m的倍数
所以
,
又有
两边同时乘
得
带入
原方程组成立。
代码实现
同余式的求解可以用扩展欧几里得
void exgcd(int a,int b,int &x,int &y)
{
if(b==0){ x=1; y=0; return;}
exgcd(b,a%b,x,y);
int tp=x;
x=y; y=tp-a/b*y;
}
int china()
{
int ans=0,lcm=1,x,y;
for(int i=1;i<=k;++i) lcm*=b[i];
for(int i=1;i<=k;++i)
{
int tp=lcm/b[i];
exgcd(tp,b[i],x,y);
x=(x%b[i]+b[i])%b[i];//x要为最小非负整数解
ans=(ans+tp*x*a[i])%lcm;
}
return (ans+lcm)%lcm;
}

本文深入探讨了中国剩余定理的原理与应用,详细解析了解同余方程组的方法,特别是针对两两互质的整数集合。文章通过数学证明阐述了定理的有效性,并提供了代码实现示例,包括使用扩展欧几里得算法求解同余式。
2341

被折叠的 条评论
为什么被折叠?



