3 1 100 2 2 3 19
Case #1: 14 Case #2: 1 Case #3: 4
错了好多次,终于过了,
#include<stdio.h> #include<math.h> #define MAXN 1000010 int prime[MAXN]; int arr[MAXN]; int main() { int i,j; int count=0; int T; int Q; int L,R; for(i=2;i<MAXN;i++) if(i%2==1) prime[i]=1; else prime[i]=0; for(i=3;i<=sqrt(MAXN*1.0);i++)//在用sqrt的时候要乘1.0,换成double型的,服务器上的高精度,所以必须改成高精度 { if(prime[i]) for(j=i+i;j<MAXN;j+=i) prime[j]=0; } prime[2]=1; for(i=2;i<MAXN;i++) { if(prime[i]) { int d=0; int t=i; while(t) { d+=t%10; t/=10; } if(prime[d]) count++; } arr[i]=count; } scanf("%d",&T); for(Q=1;Q<=T;Q++) { scanf("%d%d",&L,&R); printf("Case #%d: %d\n",Q,arr[R]-arr[L-1]); } return 0; }
原文:http://blog.csdn.net/qq_16767427/article/details/38065259