WA求助
查看原帖
WA求助
200044
JS_TZ_ZHR楼主2020/7/20 21:01

RT,优化了一下,常数是原来的三分之一

#pragma GCC optimize(3,"Ofast","inline")
#include<bits/stdc++.h>
using namespace std;
int n,q,prime[61000000],cnt,k;
bool check[100000005];
inline int read() {
	register int x=0;
	register char ch=getchar();
	while(ch<'0'||ch>'9')ch=getchar();
	while(ch>='0'&&ch<='9') {
		x=(x<<3)+(x<<1)+(ch^48);
		ch=getchar();
	}
	return x;
}
int main() {
	n=read(),q=read();
	cnt=2;
	prime[1]=2;
	prime[2]=3;
	for(int i=4; i<=n; i+=2)check[i]=true;
	for(int i=9; i<=n; i+=6)check[i]=true;
	for(int i=5; i<=n; i++) {
		if(!check[i]) {
			prime[++cnt]=i;
			if(i>1e5) continue;
			for(register int j=i*5; j<=n; j+=i*6) {
				check[j]=true;
				check[j+(2*i)]=true;
			}
		}
	}
	while(q--) {
		k=read();
		printf("%d\n",prime[k]);
	}
}
2020/7/20 21:01
加载中...