给出一个线性同余方程组
x≡b1(mod m1)
x≡b2(mod m2)
x≡b3(mod m3)
......
x≡bn(mod mn)
其中m1,m2,...,mn两两互素,求x.
令M=m1*m2*m3*...*mn.
Mi=M/mi.
Mi'Mi≡1 (mod mi)
用扩展欧几里得算法求出Mi关于mi的乘法逆元Mi'.
x=∑Mi'Mibi mod M
code:
var p,q,r:array[0..10000] of longint; n,i,m,xx,yy,ans:longint; function exgcd(a,b:longint; var x,y:longint):longint; var t:longint; begin if b=0 then begin exgcd:=a; x:=1; y:=0; end else begin exgcd:=exgcd(b,a mod b,x,y); t:=x; x:=y; y:=t-a div b*y; end; end; begin readln(n); m:=1; for i:=1 to n do begin readln(p[i],q[i]); m:=m*q[i]; end; for i:=1 to n do r[i]:=m div q[i]; for i:=1 to n do begin exgcd(r[i],q[i],xx,yy); ans:=ans+xx*r[i]*p[i]; end; writeln(Ans mod m); end.