样例未过求条
查看原帖
样例未过求条
732034
Exscallop64_楼主2025/2/6 16:47

rt

#include<bits/stdc++.h>

using namespace std;
using ll = long long;
using ll_ = __int128;
using pii = pair<ll_, ll_>;

const int N = 1e5 + 5;

int n;
ll a[N], m[N];

ll_ Gcd(ll_ x, ll_ y){
  return !y ? x : Gcd(y, x % y);
}

ll_ Lcm(ll_ x, ll_ y){
  return x / Gcd(x, y) * y;
}

pii Exgcd(ll_ a, ll_ b){
  if(!b) return {1, 0};
  pii res = Exgcd(b, a % b);
  return {res.second, res.first - a / b * res.second};
}

ll_ Excrt(int n, ll a[], ll m[]){
  ll_ A = a[1], M = m[1];
  for(int i = 2; i <= n; i++){
  	ll_ p = Exgcd(M, m[i]).first;
  	ll_ gcd = Gcd(M, m[i]), lcm = Lcm(M, m[i]);
  	p = (p * (A - a[i]) / gcd % lcm + lcm) % lcm;
  	A = ((M * p + A) % lcm + lcm) % lcm;
  	M = lcm;
  }
  return A % M;
}

int main(){
  ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
  cin >> n;
  for(int i = 1; i <= n; i++){
  	cin >> m[i] >> a[i];
  }
  cout << (ll)Excrt(n, a, m);
  return 0;
}
2025/2/6 16:47
加载中...