[模板]CRT(ex)
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 int CRT(){ 2 int ans=0,x,y; 3 for(int i=1;i<=nom;++i){ 4 ex_gcd(prr/tim[i],tim[i],x,y); 5 x=(x%tim[i]+tim[i])%tim[i]; 6 ans=(ans+prr/tim[i]*aans[i]%prr*x%prr)%prr; 7 } 8 return ans; 9 }
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 L gcd(L a,L b){return b?gcd(b,a%b):a;} 2 void ex_gcd(L a,L b,L &x,L &y){ 3 if(!b){x=1;y=0;return;} 4 ex_gcd(b,a%b,x,y); 5 res=x;x=y;y=res-a/b*y; 6 } 7 L inv(L p,L mod){ex_gcd(p,mod,x,y);return (x%mod+mod)%mod;} 8 int main(){ 9 while(scanf("%d",&n)==1){bj=0; 10 for(int i=1;i<=n;++i)scanf("%lld%lld",&m[i],&a[i]); 11 for(int i=2;i<=n;++i){ 12 a1=a[i-1];a2=a[i];m1=m[i-1];m2=m[i];mgcd=gcd(m1,m2); 13 if((a1-a2)%mgcd){bj=1;break;} 14 m[i]=m1*m2/mgcd; 15 a[i]=(inv(m1/mgcd,m2/mgcd)*(a2-a1)/mgcd)%(m2/mgcd)*m1+a1; 16 a[i]=(a[i]%m[i]+m[i])%m[i]; 17 } 18 printf("%lld\n",!bj?a[n]:-1); 19 } 20 }
$Fate \ is \ Fake$