矜(bai)持(gei)的云拏 2022-10-17 13:02 采纳率: 80%
浏览 15
已结题

关于C的问题,如何解决?

我的疑问:为什么我的程序不能输入?是循环太大了以至于跑不过来了吗?

Description
题目描述
如果n和n+2都是素数,我们称其为孪生素数,比如3和5,5和7都是孪生素数。 给你一个区间[a,b],请问期间有多少对孪生素数?

输入
第一行是一个整数K(K≤ 10000),表示样例的个数。 以后每行一个样例,为两个整数,a和b,1≤a≤b≤5000000。

输出
每行输出一个样例的结果。

样例输入
5
1 3
1 10
1 100
1 1000
1 5000000
样例输出
0
2
8
35
32463


#include<bits/stdc++.h>
using namespace std;
int no_prime[5000001]={0};
int s[5000001]={0};
int main(){
    printf("5\n");
    no_prime[0]=1;
    no_prime[1]=1;
    for(int i=2;i<5000001;i++){
        if(!no_prime[i]){
            for(int j=i*i;j<5000001;j+=i){
                no_prime[j]=1;
            }
        }
    }
//    printf("5\n");
    for(int i=1;i+2<=5000000;i++){
        if(!no_prime[i]&&!no_prime[i+2]) s[i]=s[i-1]+1;
        else s[i]=s[i-1];
    }
//    printf("5\n");
    int ans,k,a,b;
    cin>>k;
    while(k--){
        cin>>a>>b;
        ans=s[b]-s[a-1];
        if((!no_prime[b]&&!no_prime[b+2])||(!no_prime[b-1]&&!no_prime[b+1]))
        printf("%d\n",ans);
    }
    
    return 0;
    
}
  • 写回答

1条回答 默认 最新

  • X-道至简 2022-10-17 13:32
    关注

    前面的循环太大了,你调试的时候先弄小点,看下逻辑是否对, 先把50000001改成5调试下逻辑先
    还有最好加上头文件 iostream

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 1月9日
  • 已采纳回答 1月1日
  • 创建了问题 10月17日

悬赏问题

  • ¥15 c语言怎么用printf(“\b \b”)与getch()实现黑框里写入与删除?
  • ¥20 怎么用dlib库的算法识别小麦病虫害
  • ¥15 华为ensp模拟器中S5700交换机在配置过程中老是反复重启
  • ¥15 java写代码遇到问题,求帮助
  • ¥15 uniapp uview http 如何实现统一的请求异常信息提示?
  • ¥15 有了解d3和topogram.js库的吗?有偿请教
  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
  • ¥15 关于#Java#的问题,如何解决?