这一题,写的我是惊心动魄的,数据好大,原来预处理一下可以ac
没有什么要特别注意的地方~
#include <iostream>
using namespace std;
const int size=1000001;
bool vis[size+5];
int sev[30125];
int main()
{
int t,s,lens,f,a,b,sum;
cin>>t;
lens=0;
memset(vis,0,sizeof(vis));
vis[0]=vis[1]=1;
for(int i=2;i<=1000;i++) //这里要稍微注意一下,不能在写错 i<=size,不然会爆掉
if(!vis[i])
for(int j=i*i;j<=size;j+=i)
vis[j]=1;
sev[0]=2; sev[1]=3;
lens=2;
for(int i=5;i<=size;i++)
if(!vis[i])
{
f=0; s=i;
f+=s%10;s/=10; f+=s%10;s/=10;
f+=s%10;s/=10; f+=s%10;s/=10;
f+=s%10;s/=10; f+=s%10;s/=10;
if(!vis[f])
sev[lens++]=i;
}
s=0;
while(t--)
{
s++;sum=0;
scanf("%d%d",&a,&b);
for(int i=0;i<=lens;i++)
{
if(sev[i]>b)break;
if(sev[i]>=a&&sev[i]<=b)
sum++;
}
printf("Case #%d: %d\n",s,sum);
}
return 0;
}