简单程序为什么超时了

#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");
    }
}