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 (GCC 5.4.1) (judge verdict: Accepted)

#include<stdio.h>
#include<string.h>
#include<math.h>
#include<stdlib.h>
#include<limits.h>

#define rep(i,begin,end) for(int i=begin; i<end; i++)
#define revrep(i,begin,end) for(int i=begin; i>end; i--)
#define lld long long int

int t[100001];
int sum[100001];

int isPrime(int n){
    if(n==1){
        return 0;
    }
    if(n==2||n==3){
        return 1;
    }
    if(n%2==0||n%3==0){
        return 0;
    }
    for(int i=5;i*i<=n;i+=2){
        if(i%3==0){
            continue;
        }
        if(n%i==0){
            return 0;
        }
    }
    return 1;
}

void init(){
    rep(i, 1, 100001){
        t[i] = -1;
    }
    t[0] = 0;
    t[1] = 0;
    for(int i=2; i<=100000; i++){
        t[i] = isPrime(i);
    }
    sum[0] = 0;
    rep(i, 1, 100001){
        int buf = 0;
        if(i%2==1 && t[i]==1 && t[(i+1)/2]==1){
            buf = 1;
        }
        sum[i] = sum[i-1] + buf;
    }
    return;
}

int main(){
    init();
    int q;
    scanf("%d", &q);
    int ans[q];
    rep(i, 0, q){
        int l ,r;
        scanf("%d %d", &l, &r);
        ans[i] = sum[r] - sum[l-1];
    }
    rep(i, 0, q){
        printf("%d\n", ans[i]);
    }

    return 0;
}