【数论】中国剩余定理

中国剩余定理

求解 \(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; 
}
posted @ 2020-09-29 17:36  草丛怪  阅读(102)  评论(0编辑  收藏  举报