中国剩余定理

求解x ≡ b[](mod w[])中的x值

 1 #include <stdio.h>
 2 int ext_euclid(int a,int b,int &x,int &y)  //求gcd(a,b)=ax+by
 3 {
 4     int t,d;
 5     if (b==0) {x=1;y=0;return a;}
 6     d=ext_euclid(b,a %b,x,y);
 7     t=x;
 8     x=y;
 9     y=t-a/b*y;
10     return d;
11 }
12 
13 
14 int China(int B[],int W[],int k)
15 {
16     int i;
17     int d,x,y,a=0,m,n=1;
18     for (i=0;i<k;i++)
19         n*=W[i];
20     for (i=0;i<k;i++)
21     {
22         m=n/W[i];
23         d=ext_euclid(W[i],m,x,y);
24         a=(a+y*m*B[i])%n;
25     }
26     if (a>0) return a;
27     else return(a+n);
28 }
29 int main(){
30     int len,B[100],W[100];
31     scanf("%d",&len);
32     for(int i = 0; i < len; i++)
33         scanf("%d%d",&B[i],&W[i]);
34     int ans = China(B,W,len);
35     printf("%d\n",ans);
36     return 0;
37 }

 

posted @ 2016-05-27 18:01  赤云封天  阅读(161)  评论(0编辑  收藏  举报