Schrittweite 2021-12-04 20:47 采纳率: 0%
浏览 42

简单程序为什么超时了

#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条回答 默认 最新

  • 关注

    (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");
        }
    }
    
    
    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 12月4日

悬赏问题

  • ¥15 WPF动态创建页面内容
  • ¥15 如何对TBSS的结果进行统计学的分析已完成置换检验,如何在最终的TBSS输出结果提取除具体值及如何做进一步相关性分析
  • ¥15 SQL数据库操作问题
  • ¥100 关于lm339比较电路出现的问题
  • ¥15 Matlab安装yalmip和cplex功能安装失败
  • ¥15 加装宝马安卓中控改变开机画面
  • ¥15 STK安装问题问问大家,这种情况应该怎么办
  • ¥15 关于罗技鼠标宏lua文件的问题
  • ¥15 halcon ocr mlp 识别问题
  • ¥15 已知曲线满足正余弦函数,根据其峰值,还原出整条曲线