代码求调
查看原帖
代码求调
651786
yyc_楼主2022/2/27 12:52
#include<bits/stdc++.h>
#include<map>
using namespace std;
#define ll long long
#define mn 100000
map<long long,int> HashOnMap;
ll a[mn], p[mn], b[mn]; 
void exgcd(ll a, ll b, ll& d, ll& x, ll& y) {
	if (!b) { d = a; x = 1; y = 0; }
	else { exgcd(b, a % b, d, y, x); y -= x * (a / b); }
}
ll inv(ll a, ll p) {
	ll d, x, y;
	exgcd(a, p, d, x, y);
	return d == 1 ? (x + p) % p : -1;
}
int main() {
	ll T;
	cin >> T;
	while (T--) {
		long long k, SumOfB = 0, TimesOfA = 1;
		cin >> k;
		for (ll i = 1; i <= k; ++i) cin >> a[i];
		for (ll i = 1; i <= k; ++i) cin >> b[i];
		for (ll i = 1; i <= k; ++i) cin >> p[i];

		bool ok = 1;

		for (ll i = 1; i <= k; ++i) {
			TimesOfA *= a[i];
			SumOfB *= a[i];
			SumOfB += b[i];
			if (TimesOfA % p[i] == 0) {
				if (SumOfB % p[i]!=0) {
					ok = 0;
					break;
				}
			}
			else {
				if (HashOnMap.count(p[i])) {
					if ((HashOnMap[p[i]] - ((inv(TimesOfA, p[i]) % p[i] * (SumOfB % p[i])) % p[i])) % p[i]!=0) {
						ok = 0;
						break;
					}
				}
				else {
					HashOnMap[p[i]] = ((inv(TimesOfA, p[i]) % p[i] * (SumOfB % p[i])) % p[i]);
				}
			}
		}
		
		cout << ((ok) ? ("Yes\n"):("No\n"));
	}
}
2022/2/27 12:52
加载中...