似乎这种水题不该写解题报告的,但是,一个j=i*i的溢出导致了我今天的悲剧,今天是我的生日呀!!!怎么可以这样!!!
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#define maxn 1000000+5
using namespace std;
bool isprime[maxn];
void init()
{
memset(isprime,true,sizeof(isprime));
isprime[0]=isprime[1]=false;
for(int i=2; i<maxn; i++)
{
if(isprime[i])
{
for(int j=i+i; j<maxn; j+=i)
isprime[j]=false;
}
}
}
int check(int n)
{
int sum=0;
while(n)
{
sum+=n%10;
n/=10;
}
return sum;
}
int ans[maxn],k,l,a,b;
void input()
{
init();
memset(ans,0,sizeof(ans));
for(int i=2;i<maxn;i++)
{
k=0;
if(isprime[i])
{
if(isprime[check(i)])
{
k=1;
}
}
ans[i]=ans[i-1]+k;
}
cin>>l;
for(int i=1;i<=l;i++)
{
cin>>a>>b;
cout<<"Case #"<<i<<": "<<ans[b]-ans[a-1]<<endl;
}
}
int main()
{
input();
return 0;
}