其中m不互质
我们假设前k-1个方程的一个解为ans
显然通解为ans + t * lcm , 其中lcm为前k-1项的最小公倍数 , t为任意整数
我们现在要求t 满足
也就是
转换为exgcd的形式
显然最后的t就是 解出来的t 乘一个
#include<bits/stdc++.h>
#define N 100050
#define LL long long
using namespace std;
LL a,b,lcm,gcd,ans,x,y; int n;
LL mul(LL a,LL b,LL p){
LL ans=0;
for(;b;b>>=1){
if(b&1) ans = (ans+a) % p;
a = (a+a) % p;
}return ans;
}
void exgcd(LL a,LL b){
if(!b){x=1,y=0,gcd=a;return;}
exgcd(b,a%b); LL x1=y,y1=x-a/b*y; x=x1,y=y1;
}
int main(){
scanf("%d%lld%lld",&n,&a,&b);
ans = b , lcm = a;
for(int i=2;i<=n;i++){
scanf("%lld%lld",&a,&b);
//lcm * t + ans = b (mod a)
//-> a*y + b = lcm * t + ans -> lcm * t - a*y = b-ans
LL c=(b-ans%a+a)%a;
if(c%gcd){printf("Impossible"); return 0;}
exgcd(lcm,a); x = mul(x,c/gcd,a/gcd);
ans += lcm*x; lcm *= a/gcd;
ans = ((ans % lcm) + lcm) % lcm;
}printf("%lld",ans); return 0;
}