#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const int N = 1e7 + 5000, MOD = 1e9 + 7;
int primes[N], cnt;
int arr[N];
bitset<N> st;
void prime(int x) {
for(int i = 2; i * i <= x; ++ i) {
if(!st[i]) {
primes[++ cnt] = i;
}
for(int j = 1; primes[j] * i <= x; ++ j) {
st[primes[j] * i] = true;
if(i % primes[j] == 0) break;
}
}
}
void solve(){
int n;
cin >> n;
for(int i = 1; i <= n; ++ i) cin >> arr[i];
if(n == 2) {
cout << "Yes\n";
return;
}
unordered_map<int, int> mp;
for(int i = 1; i <= n; ++ i) {
for(int j = 1; primes[j] * primes[j] <= arr[i] && j <= cnt; ++ j) {
if(arr[i] % primes[j] == 0) {
if(mp.count(primes[j])) {
cout << "No\n";
return;
}
mp[primes[j]] = 1;
while(arr[i] % primes[j] == 0) {
arr[i] /= primes[j];
}
}
}
if(arr[i] > 1) {
if(mp.count(arr[i])) {
cout << "No\n";
return;
}
mp[arr[i]] = 1;
}
}
cout << "Yes\n";
}
signed main(){
ios::sync_with_stdio(false);
cin.tie(0);cout.tie(0);
prime(1e4);
int t;
cin >> t;
while( t -- )
solve();
return 0;
}
为什么第31行不加 && j <= cnt 会一直RE, 就算质数筛到1e7也会RE....