#define ll long long
ll n,i,fail;
ll a,b,lcm,now,k,d,x,y;
ll exgcd(ll a,ll b,ll &x,ll &y)
{
if(!b) {x=1; y=0; return a;}
LL c=exgcd(b,a%b,x,y),z=x;
x=y; y=z-y*(a/b);
return c;
}
ll CRT(int n){
//n 表示n个方程组
scanf("%lld%lld",&a,&b);
lcm=a; now=b; fail=0;
for(i=1;i<n;i++)
{
scanf("%lld%lld",&a,&b);
b=(b-now%a+a)%a;
d=exgcd(lcm,a,x,y);
if(b%d==0) k=x*(b/d)%a; else fail=1;
now+=k*lcm;
lcm=lcm/d*a;
now=(now%lcm+lcm)%lcm;
}
if(fail)return -1;
else return now;
}
中国剩余定理模版
最新推荐文章于 2020-09-22 14:29:39 发布