素数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;
}
作者:qbning
-------------------------------------------
个性签名:曾经的我们空有一颗望海的心,却从没为前往大海做过真正的努力
如果觉得这篇文章对你有小小的帮助的话,记得在右下角点个“推荐”哦,博主在此感谢!