时间复杂度问题
查看原帖
时间复杂度问题
281499
Liar_Dancer楼主2021/11/20 20:55

RT,洛谷AC,最慢113ms,正式比赛能过吗

#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<vector>
#include<cstdlib>
#include<ctime>
#include<map>
#include<stack>
#include<queue>
using namespace std;
#define M 10000010
typedef long long ll;
int ok[M],m,mp[M];
bool isok[M];
bool seven(int x){
	while(x){
		if(x%10==7)
			return 1;
		x/=10;
	}
	return 0;
}
int read(){
	char ch=getchar();
	int ans=0;
	while(ch!='\n'){
		ans=(ans<<3)+(ans<<1)+(ch-'0');
		ch=getchar();
	}
	return ans;
}
int n,x;
int main(){
	for(int i=1;i<M;i++){
		if(!isok[i])
			if(seven(i)){
				isok[i]=1;
				for(int j=i;j<M;j+=i)
					isok[j]=1;
			}
		if(!isok[i])
			ok[++m]=i;
		mp[i]=m;
	}
	n=read();
	for(int i=1;i<=n;i++){
		x=read();
		if(isok[x])printf("-1\n");
		else printf("%d\n",ok[mp[x]+1]);
	}
	return 0;
}
2021/11/20 20:55
加载中...