小慧想统计某个区间范围里的素数,例如,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),用空格隔开,表示一个区间范围。
#include<bits/stdc++.h>
#include<iostream>
#include<iomanip>
#ifndef _GLIBCXX_STRING
#define _GLIBCXX_STRING 1
#pragma GCC system_header
#include <bits/c++config.h>
#include <bits/stringfwd.h>
#include <bits/char_traits.h> // NB: In turn includes stl_algobase.h
#include <bits/allocator.h>
#include <bits/cpp_type_traits.h>
#include <bits/localefwd.h> // For operators >>, <<, and getline.
#include <bits/ostream_insert.h>
#include <bits/stl_iterator_base_types.h>
#include <bits/stl_iterator_base_funcs.h>
#include <bits/stl_iterator.h>
#include <bits/stl_function.h> // For less
#include <ext/numeric_traits.h>
#include <bits/stl_algobase.h>
#include <bits/range_access.h>
#include <bits/basic_string.h>
#include <bits/basic_string.tcc>
#endif /* _GLIBCXX_STRING */
#include<math.h>
#include<cmath>
using namespace std;
bool p[1000001];
int t[1000001];
int t1[100000];
int main(){
int n,a,b,sum,k=1,L,R,M,S,P,a1,b1;
cin>>n;
for(int i=1;i<=1000000;i++){
p[i]=1;
}
p[1]=0;
for(int i=2;i<=1000;i++){
if(p[i]==1){
for(int j=i*2;j<=1000000;j=j+i){
p[j]=0;
}
}
}
for(int i=1;k<=1000000;k++){
if(p[k]==1){
t[k]=i;
t1[i]=k;
i++;
}
}
for(int i=1;i<=n;i++){
cin>>a>>b;
sum=0;
if(a<=999983)
{
for(a1=a;;a1++){
if(p[a1]==1){
break;
}
}
}
else
{
cout<<0<<endl;
continue;
}
if(a==1)
{
if(b==1)
{
cout<<0<<endl;
continue;
}
else
{
a1=1;
for(b1=b;;b1--){
if(p[b1]==1){
break;
}
}
b1=t[b1];
cout<<b1-a1+1<<endl;
continue;
}
}
if(b!=1)
{
for(b1=b;;b1--){
if(p[b1]==1){
break;
}
}
}
else
{
cout<<0<<endl;
continue;
}
a1=t[a1];
b1=t[b1];
if(a1>b1)
{
cout<<0<<endl;
}
else
{
cout<<b1-a1+1<<endl;
}
}
return 0;
}