HDOJ4548_美素数
简单的素数问题
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<string.h>
bool num[1000005]={false,false,true};//初始化1不是素数,2为素数
int suShu[1000005]={0};//存储当前数字以内的美素数个数
int main()
{
//求解N以内的所有素数序列
int sum=0;
int i,j,n;
for(i=3;i<=1000005;i++)
{
num[i]=true;
}
for(i=2;i*i<1000005;i++)
{
if(num[i]==true)
{
for(j=i*i;j<1000005;j+=i)
{
num[j]=false;
}
}
}
for(j=2;j<=1000005;j++)
{
if(num[j]==true)
{
int tmp=j,number=0;
while(tmp!=0)
{
number+=(tmp%10);
tmp/=10;
}
if(num[number]==true)
sum++;
}
suShu[j]=sum;
}
// printf("%d\n",suShu[2]);
scanf("%d",&n);
for(i=1;i<=n;i++)
{
int a,b;
int sum=0;
scanf("%d %d",&a,&b);
printf("Case #%d: %d\n",i,suShu[b]-suShu[a-1]);
}
//打印所得到的序列初步判断是否正确
// for(i=2;i*i<1000005;i++)
// {
// if(num[i]==true)
// {
// printf("%d ",i);
// }
// }
return 0;
}