题目描述
桐桐想统计某个区间范围里的素数,例如,A=2,B=10,则A和B之间(包括A、B)素数一共有4个,分别为:2,3,5,7。现在桐桐给出N个区间范围,问每个区间有多少个素数。请你帮助她统计一下。
输入格式
第1行一个整数N(1≤N≤10^5);
后有N行,每行两个整数A B(1≤A≤B≤10^6),用空格隔开,表示一个区间范围。
输出格式
共N行,每行一个整数,对应区间范围的素数个数。
样例输入
2
2 8
1 13
样例输出
4
6
AC代码
#include<bits/stdc++.h>
using namespace std;
bool a[1000005];
int b[1000005];
int main(){
for(int i=2;i<=1000004;i++){
b[i]=b[i-1];
if(!a[i]){
b[i]++;
for(int j=i*2;j<=1000004;j+=i){
a[j]=1;
}
}
}
int n,x,y;
scanf("%d",&n);
while(n){
scanf("%d%d",&x,&y);
printf("%d\n",b[y]-b[x-1]);
n--;
}
return 0;
}