using namespace std;
#include <iostream>
#include <cmath>
#define MAXN 1000000
int ans[MAXN+2] = {0, 0, 1}; // ans[i] 为0到i的美素数个数
//筛选法判断素数
int isprime(int n){
if (n==3||n==2)
return 1;
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();
cin>>t;
for(i=1; i<=t; i++) {
// 读入区间
cin>>l>>r;
// 输出结果
cout<<"Case #"<<i<<": "<<ans[r] - ans[l-1]<<endl;
}
return 0;
}
HDU4548 美素数[入门]
最新推荐文章于 2022-03-14 21:17:23 发布