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

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

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

1.接收数据 int n
2.求出 2 ~ n 以内的素数
3.在范围内筛选
2.3.也可以同时进行

#include <stdio.h>
#include <math.h> 
int main(){
    //思路分析
    /*
    1.接收数据 int n 
    2.求出 2 ~ n 以内的素数
    3.在范围内筛选
    */
    int n, count = 0, k = 1;
    scanf("%d",&n);
    int suShu[n];
    suShu[0] = 2;
    if(n < 5){
        printf("%d",0);
    }else{
        for(int i = 2; i <= n; i++){
            int j;
            for(j = 2; j <= sqrt(i); j++){
                if(i % j == 0){
                    break;
                }
            }
            if(j > sqrt(i)){
                suShu[k] = i;
                if(suShu[k] - suShu[k-1] == 2){
                    count++;
                }
                k++;
                }
        }
        printf("%d",count);
    }  
}

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632