读书人

杭电3792如何会超时。多谢

发布时间: 2013-03-10 09:38:39 作者: rapoo

杭电3792怎么会超时。。。谢谢
题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=3792

#include<stdio.h>
#define maxsize 100000
int T[maxsize];
_int64 n;
int stack[maxsize];
int top;
void pri()
{
_int64 i,j;
for(i=2;i<=n;i++)
{
if(T[i]==0)
{
stack[top++]=i;
for(j=i;i*j<=n;j++)
T[i*j]=1;
}
}
}
int main()
{
int i,num;
while(1)
{
scanf("%I64d",&n);
if(n<0)
break;
for(i=0;i<=n;i++)
T[i]=0;
top=0;
pri();
num=0;
for(i=0;i<top-1;i++)
if(stack[i+1]-stack[i]==2)
num++;
printf("%d\n",num);
}
}

[解决办法]
你每输入一个n就重新打一次质数表,还要重新数一次,当然TLE啦。。
只需要打一次1到10^5的质数表,然后扫一次,就可以算出n=1到10^5时的所有答案,记录在一个表中,然后对于每个查询只需要查表O(1)复杂度解决。

读书人网 >软件架构设计

热点推荐