1 int exgcd(int a,int b,int &x,int &y) 2 { 3 if(b==0) 4 { 5 x=1,y=0; 6 return a; 7 } 8 int gcd=exgcd(b,a%b,x,y); 9 int t=x; 10 x=y; 11 y=t-a/b*y; 12 return gcd; 13 } 14 int China(int W[],int B[],int k) 15 { 16 int x,y,a=0,m,n=1; 17 for(int i=1;i<=k;i++) 18 n*=W[i]; 19 for(int i=1;i<=k;i++) 20 { 21 m=n/W[i]; 22 exgcd(W[i],m,x,y); 23 a=(a+y*m*B[i])%n; 24 } 25 return a>0?a:(a+n); 26 }
不知道为啥,用快速幂求逆元就挂了…