板板们

发布时间 2023-10-16 16:13:15作者: cqbz_dxm

数学

CRT
inline int exgcd (const int &a, const int &b, int &x, int &y) {
	if (!b) return x = 1, y = 0, a;
	int d = exgcd(b, a % b, y, x);
	return y -= a / b * x, d;
}
inline int inv (const int &a, const int &m) {
	int x, y, d = exgcd(a, m, x, y);
	return (x % m + m) % m;
}
inline int CRT (const int *a, const int *m) {
	int M = 1, res = 0;
	for (int i = 1; i <= n; i++) M *= m[i];
	for (int i = 1; i <= n; i++) {
		int Mi = M / m[i];
		(res += a[i] * Mi * inv(Mi, m[i])) %= M;
	}
	return res < 0 ? res + M : res;
}