可参考资料:

资料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;
}