关于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
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;
    
}

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