[vijos1164] 曹冲养猪

来源:互联网 发布:k8陀螺仪软件调试 编辑:程序博客网 时间:2024/04/30 13:16

传送门

https://vijos.org/p/1164

题目大意

求解模方程组

题解


  • 是中国剩余定理的裸体
  • 但是我并不想用中国剩余定理,因为它只适用于模数互质
  • ydcydc数学
  • 参见里面的 将中国剩余定理丢进垃圾桶

ansmoda1=b1   ansmoda2=b2
a1x+b1=a2y+b2
x,b=xa1+b1,a=lcm(a1,a2),
xmoda=b

代码

var d,e:array[0..20]of int64; i,j:longint; n:longint; a,b,c,x,y,t,v:int64;function gcd(a,b:int64):int64;begin if b=0 then gcd:=a else gcd:=gcd(b,a mod b);end;function lcm(a,b:int64):int64;begin lcm:=(a*b)div gcd(a,b);end;procedure exgcd(a,b:int64; var x,y:int64);var t:longint;begin if b=0 then begin x:=1; y:=0; end else begin exgcd(b,a mod b,x,y); t:=x; x:=y; y:=t-y*(a div b); end;end;begin readln(n); for i:=1 to n do  readln(d[i],e[i]); for i:=1 to n-1 do  {x*d[i]+e[i]=y*d[i+1]+e[i+1]}  {x*d[i]+y*(-d[i+1])=e[i+1]-e[i]}  begin   a:=d[i]; b:=d[i+1]; c:=e[i+1]-e[i];   {a*x+b*y=c}   t:=gcd(a,b);   a:=a div t; b:=b div t; c:=c div t;   exgcd(a,b,x,y);   x:=x*c div t;   v:=x*t div b;   x:=x-v*b div t;   if x<0 then x:=x+b div t;   x:=(x+b)mod b;   d[i+1]:=lcm(d[i],d[i+1]); e[i+1]:=x*d[i]+e[i];  end; writeln(e[n]);end.
0 0
原创粉丝点击