链接:点击打开链接
题意很明了啦,求区间内美素数的个数。果断素数筛选法。。
#include<iostream>
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
#define MAX 1000010
int a[MAX],b[MAX];
void fun(){
int i,ans,sum,j;
a[1]=0;a[2]=1;
for(i=3;i<=MAX;i++){
if(i%2==0)
a[i]=0;
else
a[i]=1;
}
for(i=3;i<=MAX;i+=2){
if(a[i]){
for(j=i+i;j<=MAX;j+=i) a[j]=0;
}
}
ans=0;
for(i=1;i<=MAX;i++){
if(a[i]){
j=i;
sum=0;
while(j!=0){
sum+=j%10;
j/=10;
}
if(a[sum])
ans++;
}
b[i]=ans;
}
}
int main(){
int t,l,r,i,j,k;
fun();
scanf("%d",&t);
for(k=1;k<=t;k++){
scanf("%d %d",&l,&r);
if(a[l]){
i=0;
j=l;
while(j!=0){
i+=j%10;
j/=10;
}
if(a[i])
printf("Case #%d: %d\n",k,b[r]-b[l]+1);
else
printf("Case #%d: %d\n",k,b[r]-b[l]);
}
else
printf("Case #%d: %d\n",k,b[r]-b[l]);
}
return 0;
}