中国剩余定理

program t;
var n,i:longint;
    j,k,m,x,y,ans,m1:int64;
    a,b:array[1..10]of int64;
procedure gcd(a,b:int64;var x,y:int64);
var t:int64;
begin
 if b=0 then
  begin
   x:=1;y:=0;exit;
  end;
 gcd(b,a mod b,x,y);
 t:=x;x:=y;
 y:=t-(a div b)*y;
end;
begin
 read(n);
 for i:=1 to n do
  begin
   read(j,k);
   a[i]:=int64(j);
   b[i]:=int64(k);
  end;
 m:=1;
 for i:=1 to n do
  m:=m*a[i];
 for i:=1 to n do
  begin
   m1:=m div a[i];
   gcd(m1,a[i],x,y);//ti*Mi≡1 mod mi
   ans:=(ans+(b[i]*x mod m)*m1 mod m)mod m;
  end;
 while ans<0 do ans:=ans+m;
 write(ans);
end.

x≡1 mod 3

x≡1 mod 5

x≡2 mod 7


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值