给出一个线性同余方程组
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.
浙公网安备 33010602011771号