求助
查看原帖
求助
625827
jishipoxiao12楼主2023/8/3 11:28
#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....

2023/8/3 11:28
加载中...