这道题目其实不难,利用素数筛选法,就可以找出来!
#include <iostream>
#include <cstdio>
using namespace std;
const int maxn=1000000;
int prime[maxn];
int cnt[maxn];
void sushu()
{
int i,j;
for(i=2;i<=maxn;i++)
prime[i]=0;
prime[0]=1;prime[1]=1;
for(i=2;i<=maxn;++i)
{
if(!prime[i])
{
for(j=2;j*i<=maxn;++j)
prime[j*i]=1;
}
}
}
int pp(int b)
{
int sum=0;
while(b)
{
sum+=b%10;
b/=10;
}
return !prime[sum];
}
int main()
{
sushu();
int t,n,m,k=0,tcase=0,i;
cnt[0]=0;//这是重点!因为当n=1时,后面cnt[n-1]=cnt[0],所以必须先告诉,我就这里没有说,导致WA了!
for(i=1;i<maxn;i++)
{
if(!prime[i]&&pp(i))
k++;
cnt[i]=k;
}
cin>>t;
while(t--)
{
cin>>n>>m;
printf("Case #%d: %d\n",++tcase,cnt[m]-cnt[n-1]);
}
return 0;
}
#include <cstdio>
using namespace std;
const int maxn=1000000;
int prime[maxn];
int cnt[maxn];
void sushu()
{
int i,j;
for(i=2;i<=maxn;i++)
prime[i]=0;
prime[0]=1;prime[1]=1;
for(i=2;i<=maxn;++i)
{
if(!prime[i])
{
for(j=2;j*i<=maxn;++j)
prime[j*i]=1;
}
}
}
int pp(int b)
{
int sum=0;
while(b)
{
sum+=b%10;
b/=10;
}
return !prime[sum];
}
int main()
{
sushu();
int t,n,m,k=0,tcase=0,i;
cnt[0]=0;//这是重点!因为当n=1时,后面cnt[n-1]=cnt[0],所以必须先告诉,我就这里没有说,导致WA了!
for(i=1;i<maxn;i++)
{
if(!prime[i]&&pp(i))
k++;
cnt[i]=k;
}
cin>>t;
while(t--)
{
cin>>n>>m;
printf("Case #%d: %d\n",++tcase,cnt[m]-cnt[n-1]);
}
return 0;
}