Problem:
Score : 400 points

Problem Statement

We say that a odd number N is similar to 2017 when both N and (N+1)/2 are prime.

You are given Q queries.

In the i-th query, given two odd numbers l_i and r_i, find the number of odd numbers x similar to 2017 such that l_i ≤ x ≤ r_i.

Constraints

1≤Q≤10^5

1≤l_i≤r_i≤10^5

l_i and r_i are odd.

All input values are integers.

Input

Input is given from Standard Input in the following format:

Q
l_1 r_1
:
l_Q r_Q

Output

Print Q lines. The i-th line (1≤i≤Q) should contain the response to the i-th query.

Sample Input 1

1
3 7

Sample Output 1

2

3 is similar to 2017, since both 3 and (3+1)/2=2 are prime.

5 is similar to 2017, since both 5 and (5+1)/2=3 are prime.

7 is not similar to 2017, since (7+1)/2=4 is not prime, although 7 is prime.

Thus, the response to the first query should be 2.

Sample Input 2

4
13 13
7 11
7 11
2017 2017

Sample Output 2

1
0
0
1

Note that 2017 is also similar to 2017.

Sample Input 3

6
1 53
13 91
37 55
19 51
73 91
13 49

Sample Output 3

4
4
1
1
1
2

Solution in C++14 (GCC 5.4.1) (judge verdict: Runtime Error)

#include <bits/stdc++.h>
#define rep(i, n) for (int i = 0; i < (int)(n); i++)
using namespace std;
using ll=long long;

//エラトステネスでqのmaxまでの素数をbitsetにぶちこみ
bitset<101010> is_prime(0);

void eratos(){
int max=101010;
for(int i=2;i<=max;i++)is_prime.set(i);
for(int i=2;i<=max;i++){
	if(is_prime[i]){
		for(int j=i*2;j<=max;j+=i)is_prime.reset(j);	
	}
}
}


//2017数判定おｋなら1
int is_2017(int x){
	int x1,x2;
	x1=x+1;//bit配列のインデックスに
	x2=(x+1)/2+1;
	
	if(is_prime.test(x1)&&is_prime.test(x2))return 1;
	else return 0;
	
}

//Qがデカいので正攻法だとTLE
int main() {
	int q;
	cin>>q;
	
	eratos();
	
	vector<int> s(101010);
	int count=0; 
	for(int i=3;i<101010;i+=2){
		if(is_prime.test(i))count++;
		s[i]=count;
	}
	
	rep(i,q){
		int l,r;
		cin>>l>>r;
		if(is_2017(l))cout<<s[r]-s[l]+1<<endl;
		else cout<<s[r]-s[l];
	}
	
	
	
}