素数II

一个好坑的题

我猜肯定数据毒瘤
题目链接

时间限制1秒。。
于是尝试埃式筛法。
交了好几次都TLE了。。去CSDN找到一位大佬的代码,他的有个BUG 输入1会输出3
然后,改了一改,主要是60行65行67行加了条件。。
tnnd,合着你题目不告诉我找不到咋办是吧?!

下面是代码

#include<iostream>
#include<algorithm> 
#include<cstring>
#include<cmath>
#include<cctype>

#pragma GCC optimize(2)
using namespace std;

inline void qin(int &x)
{
    char c=0;x=0;
    while(!isdigit(c))c=getchar();
    while(isdigit(c))x=x*10+c-'0',c=getchar();
}
bool judge[10000005];
inline void eraprime(int n)
{
	for(int i=2;i<=n;i++)
	{
		if(!judge[i])
		{
			for(int j=2;j<=n/i;j++)
			judge[i*j]=1;
		}
	}
}
int main()
{
	eraprime(10000005);
    int n;
    qin(n);
    while(n--)
    { 
    	int x;
    	qin(x);
    	if(x==1)
    	{
    		printf("%d\n",2);
    		continue;
		}
    	if(!judge[x])
    	printf("%d\n",x);
    	else
    	{
    		int l=x,r=x,t=1;
    		if(x&1)t++;
    		l-=t,r+=t;
    		while(judge[l]&&judge[r]&&l>=x-1000&&r<=x+1000)
    		{
    			l-=2;
    			r+=2;
			}
    		if(!judge[r]&&r<=10000000)
    		printf("%d\n",r);
			else if(!judge[l]&&l>1)printf("%d\n",l);
		}
	}
    return 0;
}
posted @ 2021-12-28 16:04  qbning  阅读(27)  评论(0编辑  收藏  举报
描述