<! --
Code highlighting produced by actipro codehighlighter (freeware)
Http://www.CodeHighlighter.com/
--> 1 Void Extended_gcd ( Int A, Int B, Int * X, Int * Y)
2 {
3 Int T;
4 If (B = 0 )
5 {
6 * X = 1 ;
7 * Y = 0 ;
8 Return ;
9 }
10 Extended_gcd (B, % B, x, y );
11 T = * X;
12 * X = * Y;
13 * Y = T - A / B * ( * X );
14 }
15
16 Int CRT ( Int A [], Int M [], Int N)
17 {
18 Int LCM, I, ANS, mi, X, Y;
19 LCM = 1 ;
20 For (I = 0 ; I < N; I ++ )
21 LCM * = M [I];
22 Ans = 0 ;
23 For (I = 0 ; I < N; I ++ )
24 {
25 Mi = LCM / M [I];
26 Extended_gcd (MI, M [I], & X, & Y );
27 Ans + = Mi * X * A [I];
28 }
29 Ans % = LCM;
30 While (ANS < 0 )
31 Ans + = LCM;
32 Return Ans;
33 }
<! --
Code highlighting produced by actipro codehighlighter (freeware)
Http://www.CodeHighlighter.com/
--># Include<Stdio. h>
# Include<Stdlib. h>
Void Extended_gcd ( Int A, Int B, Int * X, Int * Y)
{
Int T;
If (B = 0 )
{
* X = 1 ;
* Y = 0 ;
Return ;
}
Extended_gcd (B, % B, x, y );
T = * X;
* X = * Y;
* Y = T - A / B * ( * X );
}
Int CRT ( Int A [], Int M [], Int N)
{
Int LCM, I, ANS, mi, X, Y;
LCM = 1 ;
For (I = 0 ; I < N; I ++ )
LCM * = M [I];
Ans = 0 ;
For (I = 0 ; I < N; I ++ )
{
Mi = LCM / M [I];
Extended_gcd (MI, M [I], & X, & Y );
Ans + = Mi * X * A [I];
}
Ans % = LCM;
While (ANS < 0 )
Ans + = LCM;
Return Ans;
}
Int Main ()
{
Int I, K;
Int * B, * M;
While ( 1 )
{
Scanf ( " % D " , & K );
B = ( Int * ) Malloc ( Sizeof ( Int ) * K );
M = ( Int * ) Malloc ( Sizeof ( Int ) * K );
If ( ! K)
Break ;
For (I = 0 ; I < K; I ++ )
Scanf ( " % D " , & B [I]);
For (I = 0 ; I < K; I ++ )
Scanf ( " % D " , & M [I]);
Printf ( " % D
" , CRT (B, M, k ));
Free (B );
Free (m );
}
Return 0 ;
}