ll p[N],m[N];
//扩展欧几里得算法
void gcd(ll a,ll b,ll &d,ll &x,ll &y)
{
if(b==0)
{
d=a;
x=1,y=0;
}
else //else不能省略
{
gcd(b,a%b,d,y,x);
y-=(a/b)*x;
}
}
//中国剩余定理
ll China(int n,ll p[],ll m[])
{
ll M=1,d,y,x=0;
for(int i=0; i<n; i++) M*=p[i];
for(int i=0; i<n; i++)
{
ll w=M/p[i];
gcd(p[i],w,d,d,y);
x=(x+y*w*m[i])%M;
}
return (x+M)%M;
}
算法模板之中国剩余定理
最新推荐文章于 2022-11-01 22:50:30 发布