Description
Input
Output
Sample Input
Sample Output
程序分析:此题主要就是时间问题,如果你只是普通的循环那是肯定行不通的,在这里我选择了打表的方法。其次就是最开始我是使用了long long 型,我怕会越界,但是后来用了int型也是可以的。
程序代码:
#include<cstdio> int s[1000010]={1,1,0}; int p[1000010]; int main() { int a,b,T; int i,j; int m=0,kase; for(i=2;i*i<1000010;i++) { if(!s[i]) { for(j=2*i;j<1000010;j+=i) s[j]=1; } } for(i=2;i<1000010;i++) { if(!s[i]) { int t=i,n=0; while(t) { n+=t%10; t/=10;} if(!s[n]) {m++;} } p[i]=m; } scanf("%d",&T); for(kase=1;kase<=T;kase++) { scanf("%d%d",&a,&b); printf("Case #%d: %d\n",kase,p[b]-p[a-1]); } return 0; }
原文:http://www.cnblogs.com/yilihua/p/4737826.html