intexgcd(int a,int b,int&x,int&y){if(b ==0){
x =1;
y =0;return a;}int x2,y2;int g =exgcd(b,a%b,x2,y2);
x = y2;
y = x2-a/b*y2;return g;}
中國剩餘定理
x≡ai(%mi)...1
M=∏i=1nmi...2
令miMti≡1(%mi)...3
x=∑i=1nmiMtiai+k∗M...4
最小非負整數解爲(x%M+M)%M
可以用擴展歐幾里得求逆元.
intcrt(int a[],int m[],int n){int M =1,ans =0;for(int i =0;i < n;++i) M *= m[i];for(int i =0;i < n;++i){int Mi = lcm/m[i];exgcd(Mi,m[i],x,y);
ans =(ans + Mi%M*x%M*a[i]%M+M)%M;}if(ans <0) ans += M;return ans;}