求助,赛时代码只有50分tle,求正解
查看原帖
求助,赛时代码只有50分tle,求正解
895690
gghack_Nythix楼主2023/2/11 21:52

rt,我觉得我赛时想复杂了(埃筛 + 递归)

#include <bits/stdc++.h>
#define int long long
using namespace std;
map<int,bool>pme;
void elursleve(int n){
	pme[0] = pme[1] = true;
	for(int i = 2;i <= sqrt(n);++i){
		if(!pme[i]){
			for(int j = i * i;j <= n;j += i){
				pme[j] = true;
			}
		}
	}
}
int a[15];
bool can(int val){
	if(val == 1){
		return false;
	}
	for(int i = 2;i <= val;++i){
		if(val % i == 0){
			int tm = val / i;
			if(!pme[i] && !pme[tm]){
				return true;
			}
			else{
				return can(a[i]);
			}
		}
	}
	return false;
}
signed main(){
	int t,sle = 0;
	cin >> t;
	for(int i = 1;i <= t;++i){
		cin >> a[i];
		sle = max(sle,a[i]);
	}
	elursleve(sle);
	for(int i = 1;i <= t;++i){
		if(a[i] % 2 == 0){
			cout << "No" << endl;
		}
		else if(!pme[a[i]]){
			cout << "Yes" << endl;
		}
		else{
			if(can(a[i])){
				cout << "Yes" << endl;
			}
			else{
				cout << "No" << endl;
			}
		}
	}
}
2023/2/11 21:52
加载中...