HDOJ 4548 美素数
#include<cstdio> #include<algorithm> #include<cmath> #include<cstring> #include<iostream> using namespace std; const int L=1000005,inf=1<<30,maxn=1005; int prime[L]; bool is[L]; void getPrime() { fill(is,is+L,1); is[1]=0; int np=0; for(int i=2;i<L;i++) if(is[i]) { prime[++np]=i; for(int j=2*i;j<L;j+=i) is[j]=0; } } void Get() { for(int i=1;i<=1000000;i++) { if(!is[i]) prime[i]=0; else { int t=i,s=0; while(t) { s+=t%10; t/=10; } if(is[s]) prime[i]=1; else prime[i]=0; } } } int b[1000005]={0}; int main() { getPrime(); Get(); for(int i=1;i<=1000010;i++) { if(prime[i]) b[i]=b[i-1]+1; else b[i]=b[i-1]; } int t,s,i,l,r; // scanf("%d",&t); int cnt=0; scanf("%d",&t); while(t--) { scanf("%d%d",&l,&r); printf("Case #%d: %d\n",++cnt,b[r]-b[l-1]); } return 0; }
版权声明:本文为博主原创文章,未经博主允许不得转载。