可参考资料:
资料1
资料2
实现如下:
LL CRT(){ LL num=1,ans=0; for(int i=1;i<=n;++i) num*=a[i]; for(int i=1;i<=n;++i){ LL mum=num/a[i],x,y; exgcd(mum,a[i],x,y); ans=(ans+1ll*r[i]*mum*x%num)%num; } return (ans%num+num)%num; }