Wa 56pts 求hack
查看原帖
Wa 56pts 求hack
459188
zrt090604楼主2023/7/22 19:20

rt

#include<bits/stdc++.h>
using namespace std;
int t, n, a[500005], pr[1505], cnt, h[1505]; //pr为1~10000的所有质数,h表示一个质数出现的次数
bool vis[10005];
int main () {
	memset(pr, 0x3f, sizeof pr);
	scanf("%d", &t);
	for(int i = 2;i <= 10000;++i) {
		if(!vis[i]) pr[++cnt] = i;
		for(int j = 1;j<=cnt && i*pr[j]<=10000;++j) {
			vis[i*pr[j]] = true;
			if(i % pr[j] == 0) break;
		}
	}
	while(t--) {
		scanf("%d", &n);
		int mx = 0;
		for(int i = 1;i <= n;++i) scanf("%d", a+i), mx = max(mx, int(sqrt(a[i])));//mx表示所有数平方根的最大值
		for(int i = 1;pr[i] <= mx;++i) h[i] = 0;
		if(n == 2) {puts("Yes"); continue;} //n=2一定满足条件
		bool flag = true;
		for(int i = 1;i <= n;++i) {
			for(int j = 1;pr[j] <= mx;++j) 
				if(a[i]%pr[j]==0) {
					if(h[j]) {puts("No"); flag = false; break;}
					else h[j]=1; //质数已经出现过,再有一个数也能整除这个质数就不行了
				}
			if(!flag) break;
		}
		if(flag) puts("Yes");
	}
	return 0;
}
2023/7/22 19:20
加载中...