想要逃之夭夭 2022-03-07 12:41 采纳率: 50%
浏览 171
已结题

C语言求素数运行超时,怎么优化?

题目:

img

代码:

#include <stdio.h>
int main(){
    int n;
    scanf("%d",&n);
    int i;
    int a[100001]={0},b[100001]={0};
    
    int t=0,k,j,cnt=0;
    
    for(i=2;i<n+1;i++){
        if(a[i]==0){
            b[t++]=i;
            if(b[t]-b[t-1]==2&&t>1){
                cnt++;
            }
            for(j=i+1;j<n+1;j++){
                if(j%b[t-1]==0&&a[j]==0){
                    a[j]=1;
                }
            }            
        }
    }

    for(i=0;i<t-1;i++){
        if((b[i+1]-b[i])==2){
            cnt++;
        }
    }
    printf("%d",cnt);
    return 0;
}

运行超时:

img

认为是循环太多导致,已进行多次修改,简化循环,结果仍然运行超时。
觉得还是求素数的方法不够简洁,希望能优化程序。
希望能从中得到一个求法的简洁思路

  • 写回答

3条回答 默认 最新

  • CSDN专家-link 2022-03-07 13:19
    关注
    #include <stdio.h>
    int isprime(int n)
    {
        int k = sqrt(n*1.0);
        for(int i=2;i<=k;i++)
            if(n%i==0)
                return 0;
        return 1;
    }
    
    int main()
    {
        int n,cnt=0,i=2;
        scanf("%d",&n);
        while(i<n)
        {
            if(isprime(i) && isprime(i+2))
                cnt++;
            i++;
        }
        printf("%d\n",cnt);
        return 0;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 3月15日
  • 已采纳回答 3月7日
  • 修改了问题 3月7日
  • 创建了问题 3月7日

悬赏问题

  • ¥15 微信会员卡等级和折扣规则
  • ¥15 微信公众平台自制会员卡可以通过收款码收款码收款进行自动积分吗
  • ¥15 随身WiFi网络灯亮但是没有网络,如何解决?
  • ¥15 gdf格式的脑电数据如何处理matlab
  • ¥20 重新写的代码替换了之后运行hbuliderx就这样了
  • ¥100 监控抖音用户作品更新可以微信公众号提醒
  • ¥15 UE5 如何可以不渲染HDRIBackdrop背景
  • ¥70 2048小游戏毕设项目
  • ¥20 mysql架构,按照姓名分表
  • ¥15 MATLAB实现区间[a,b]上的Gauss-Legendre积分