思路是:
⇔(a1,a2,…,an)×[a1,a2,…,an]=i=1∏nai((a1,a2,…,an)a1,(a1,a2,…,an)a2,…,(a1,a2,…,an)an)=1
代码:
#include <iostream>
#include <cstring>
#include <algorithm>
#include <map>
using namespace std;
int T, n, a[500005], g;
map<int, bool> b;
void inti() {
n = 0;
memset(a, 0, sizeof(a));
g = 0;
for (auto& i : b) {
i.second = 0;
}
}
int ggcd(int x, int y) {
if (x == 0 || y == 0) {
return x + y;
}
return ggcd(max(x, y) % min(x, y), min(x, y));
}
bool prf(int x, int y, bool st) {
if (x == 1) {
return 0;
}
if (x % y == 0) {
if (b[y] && st) {
return 1;
}
b[y] = 1;
return prf(x / y, y, 0);
} else {
return prf(x, y + 1, 1);
}
}
int main() {
cin >> T;
here:
while (T--) {
inti();
cin >> n;
for (int i = 1; i <= n; i++) {
cin >> a[i];
}
g = a[1];
for (int i = 2; i <= n; i++) {
g = ggcd(g, a[i]);
}
for (int i = 1; i <= n; i++) {
a[i] /= g;
}
for (int i = 1; i <= n; i++) {
if (prf(a[i], 2, 1)) {
cout << "No" << endl;
goto here;
}
}
cout << "Yes" << endl;
}
return 0;
}
WA12个点,是不是结论有误