#include <iostream>
#include<string.h>
#include<math.h>
#include<stdlib.h>
using namespace std;
#define MAXN 1000000
int ans[MAXN+2] = {0, 0, 1};
int isprime(int n)
{
if(n == 3||n==2)
return 1;
if(n==1)
return 0;
int temp, i;
temp = n % 6;
if(temp != 1 && temp != 5)
return 0;
temp = sqrt(n);
for(i=3; i<=temp; i+=2)
if(n % i == 0)
return 0;
return 1;
}
int digitsum(int val)
{
int result = 0;
while(val) {
result += val % 10;
val /= 10;
}
return result;
}
void setans()
{
int sum = 1, i;
for(i=3; i<=MAXN; i+=2) {
if(isprime(i) && isprime(digitsum(i)))
sum++;
ans[i] = sum;
ans[i+1] = sum;
}
}
int main()
{
int t, l, r, i;
// 打表
setans();
scanf("%d", &t);
for(i=1; i<=t; i++) {
// 读入区间
scanf("%d%d", &l, &r);
// 输出结果
printf("Case #%d: %d\n", i, ans[r] - ans[l-1]);
}
return 0;
}
美素数
猜你喜欢
转载自blog.csdn.net/qq_42304949/article/details/90139137
今日推荐
周排行