这是我的板子但是它对于样例输出的是错的。
谢谢!
#include <iostream>
using namespace std;
typedef long long ll;
const int N=1e7+5;
int n;
ll a[N],r[N];
template<typename inte>
inte gcd(inte a,inte b){
return b==0?a:gcd(b,a%b);
}
template<typename inte>
void exgcd(inte a,inte b,inte &x,inte &y){
if(b==0) x=1,y=0;
else exgcd(b,a%b,y,x),y-=a/b*x;
}
template<typename inte>
inte abs(inte x){
return x>=0?x:-x;
}
template<typename inte>
inte exCRT(int n,inte a[],inte r[]){
inte a0=a[1],r0=r[1];
for(int i=2;i<=n;++i){
inte a1=a[i],r1=r[i],h0,h1,g=gcd(a0,-a1);
if((r1-r0)%g!=0) return -1;
exgcd(a0,-a1,h0,h1),h0=h0*(r1-r0)/g;
r0=a0*h0+r0,a0=a0*a1/abs(g);
cerr<<a0<<' '<<r0<<endl;
}
return (r0+a0)%r0;
}
int main(){
while(cin>>n){
for(int i=1;i<=n;++i) cin>>a[i]>>r[i];
cout<<exCRT(n,a,r)<<endl;
}
return 0;
}