中国剩余定理模板

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Game_Acm/article/details/82019785

A[]为互质数组,R[]为余数数组,a1为最终步长,r1为最终最小非负数答案,Gcd是扩展欧几里得,end为true时表示无解

bool end = false;
LL a1 = A[0],r1 = R[0];
for ( int i=1 ; i<m ; i++ )
{
    LL a2 = A[i],r2 = R[i];
    LL c = r2-r1,d,x,y;
    Gcd( a1 , a2 , d , x , y );
    if ( c%d!=0 ){ end = true; break; }
    LL ma = a2/d;
    x = (x*c/d%ma+ma)%ma;
    r1 = a1*x+r1;
    a1 = a1*a2/d;
}

猜你喜欢

转载自blog.csdn.net/Game_Acm/article/details/82019785
今日推荐