样例输出534,求调
查看原帖
样例输出534,求调
758820
Porridge_Dust楼主2023/11/4 16:10
#include <iostream>
#include <cstdio>
#include <algorithm>

using namespace std;

typedef long long ll;

const int N = 1e5 + 100; 

ll n;
ll r[N], m[N];

ll mul (ll a, ll b, ll mod)
{
	ll res = 0;
	while (b)
	{
		if (b & 1) res = (res + a) % mod;
		b >>= 1; a = (a + a) % mod;
	}
	return res;
}

ll exgcd (ll a, ll b, ll &x, ll &y)
{
	if (b == 0) {x = 1, y = 0; return a;}
	ll d = exgcd (b, a % b, y, x);
	y -= a / b * x;
	return d;
}

ll excrt ()
{
	for (int i = 2; i <= n; i ++ )
	{
		ll r1 = r[i - 1], m1 = m[i - 1], r2 = r[i], m2 = m[i];
		ll x, y;
		ll d = exgcd (m1, m2, x, y);
		ll lcm = m1 / d * m2 ;
		ll mod = m2 / d;
		ll k = (mul(x, abs(r1 - r2) / d, mod) + mod) % mod;
		ll nr = (mul (k, m1, lcm) + r1) % lcm;
		r[i] = nr, m[i] = lcm; 
	}
	return r[n];
}

int main ()
{
	cin >> n;
	for (int i = 1; i <= n; i ++ ) cin >> m[i] >> r[i];
	cout << excrt () << endl;
	
	return 0;
} 
2023/11/4 16:10
加载中...