#include<stdio.h>
int main()
{
int a,b;
int i,j,k;
while(scanf("%d%d",&a,&b)!=EOF)
{ int lol[500001];
if(a==0)
a++;
for(i=0;i<=b;i++)
{
lol[i]=1;
}
for(j=2;j<=b;j++)
{
for(k=2;j*k<=b;k++)
{
lol[j*k]=0;
}
}
for(i=a;i<=b;i++)
{
if(lol[i]!=0)
{
if(i!=1)
printf("%d\n",i);
}
}
printf("\n");
}
}
(1)int lol[500001];这个放在while循环外面
(2)双层for循环,因为k从2开始,所以j<=b这里改成 j<=b/2就可以了
代码改成下面的试试:
#include<stdio.h>
int main()
{
int a,b;
int i,j,k;
int lol[500001];
int t1;
while(scanf("%d%d",&a,&b)!=EOF)
{
if(a==0)
a++;
for(i=0;i<=b;i++)
{
lol[i]=1;
}
t1 = b/2;
for(j=2;j<=t1;j++)
{
for(k=2;j*k<=b;k++)
{
lol[j*k]=0;
}
}
i=(a==1?2:a);
for(/*i=a*/;i<=b;i++)
{
if(lol[i]!=0)
{
//if(i!=1)
printf("%d\n",i);
}
}
printf("\n");
}
}