【数论】中国剩余定理
中国剩余定理
求解 \(x=a_i\;(mod\;b_i)\) ,其中 \(b_1,b2,\dots,b_n\) 两两互质。
__int128 exgcd(__int128 a,__int128 b,__int128 &x,__int128 &y)
{
if(!b){
x=1;y=0;return a;
}
__int128 g=exgcd(b,a%b,x,y),t=x;
x=y;y=t-a/b*y;
return g;
}
int a[20],b[20],k;
//v=a(mod b)
ll CRT()
{
__int128 x,y,m,n=1,v=0;
for(int i=1;i<=k;i++)n*=b[i];
for(int i=1;i<=k;i++){
m=n/b[i];
exgcd(b[i],m,x,y);
v=(v+y%n*m%n*a[i])%n;
}
return (v+n)%n;//求最小非负数
// 最小正整数应该是 return v>0?v:v+n;
}