我的疑问:为什么我的程序不能输入?是循环太大了以至于跑不过来了吗?
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;
}