有个地方我写错了,不方便修改。i=j , -1<i<j<n这个地方和下面的条件换一下! // chiness remainder theorem #define N 10 typedef __int64 LL ; LL exgcd(LL a,LL b,LL &x,LL &y){ if( b == 0 ) { x = 1; y = 0; return a; } else{ LL x1,y1; LL d = exgcd ( b , a % b , x1 , y1 ); x = y1; y= x1 - a / b * y1; return d; } } LL CRT ( LL * a , LL * m , int n ) { LL M = 1 , mm [ N ] , rmm[ N ] , y ; int i = 0 ; while ( i < n ) M *= m [ i ++ ] ; i = 0 ; while( i < n ) { mm [ i ] = M / m [ i ] ; i ++ ; } for ( i = 0 ; i< n ; i ++ ) { exgcd ( mm [ i ] , m [ i ] , rmm [ i ] , y ) ; } LL ans = 0 ; i = 0 ; while( i < n ) { ans = ( ans + a[ i ] * mm [ i ] * rmm [ i ] ) % M ; i ++ ; } return ( ( ans % M ) + M ) % M ; } 原创,转载请注明!