A prime number is a positive number, which is divisible by exactly two different integers. A digit prime is a prime number whose sum of digits is also prime. For example the prime number 41 is a digit prime because 4+1=5 and 5 is a prime number. 17 is not a digit prime because 1+7 = 8, and 8 is not a prime number. In this problem your job is to find out the number of digit primes within a certain range less than 1000000.
Input
First line of the input file contains a single integer N (0<N<=500000) that indicates the total number of inputs. Each of the next N lines contains two integers t1 and t2 (0<t1<=t2<1000000).
Output
For each line of input except the first line produce one line of output containing a single integer that indicates the number of digit primes betweent1 and t2 (inclusive).
Sample Input
3
10 20
10 100
100 10000
Sample Output
1
10
576
#include <cstdio>
#include <cstring>
bool u[1000010];
int su[500010];
int uu[1000010];
bool ok(int x){
int t = 0;
while(x){
t += x % 10;
x /= 10;
}
return u[t];
}
int main(){
int i, j, k, n, num = 0;
memset(u, true, sizeof(u));
for(i = 2; i < 1000000; i++){
if(u[i]) su[num++] = i;
for(j = 0; j < num; j++){
if( i * su[j] > 1000000) break;
u[ i*su[j] ] = false;
if(i % su[j] == 0) break;
}
}
memset(uu, 0, sizeof(uu));
for(i = 2; i < 1000000; i++)
if(u[i] && ok(i)) uu[i] = 1;
for(i = 2; i < 1000000; i++)
uu[i] += uu[i-1];
scanf("%d", &k);
while(k--){
scanf("%d %d", &i, &j);
printf("%d\n", uu[j] - uu[i-1]);
}
return 0;
}