中国剩余定理
#include<iostream> #include<stdio.h> using namespace std; #define LL __int64 #define ll I64 void exgcd(LL a,LL b,LL &d,LL &x,LL &y) { if(b==0) { d=a; x=1; y=0; } else { exgcd(b,a%b,d,y,x); x=-1*x; y=-1*y; y+=(a/b)*x; } return ; } int main() { LL k,a1,r1,a2,r2,d,x,y; while(scanf("%lld",&k)!=EOF) { LL flag=1; scanf("%lld%lld",&a1,&r1); for(LL i=1;i<k;i++) { scanf("%lld%lld",&a2,&r2); exgcd(a1,a2,d,x,y); if((r2-r1)%d) flag=0; if(flag) { x=(r2-r1)/d*x; y=a2/d; x=(x%y+y)%y; r1=x*a1+r1; a1=(a1*a2)/d; } } exgcd(1,a1,d,x,y); if(r1%d) flag=0; if(flag==0) printf("-1\n"); else { x=r1/d*x; y=a1/d; x=(x%y+y)%y; printf("%lld\n",x); } } return 0; }