hdu 4548 美素数
美素数
#include<bits/stdc++.h> using namespace std; const int maxn = 1000000; int ans[maxn] = {0,0,1}; int sumdigit(int val){ int sum = 0; while(val){ sum+=val%10; val/=10; } return sum; }
//判断素数 int isSU(int val){ if(val == 2){ return 1; } if(val % 2 == 0){ return 0; } int mm = sqrt(val),i; for(i = 3;i <= mm;i+=2){ if(val % i == 0){ break; } } return i > mm ? 1 : 0; } //打表 void setF(){ int sum = 1; for(int i = 3;i <= maxn;i+=2){ if(isSU(i) && isSU(sumdigit(i))){ sum++; } ans[i] = ans[i+1] = sum; } } int main(){ setF(); int n,l,r; scanf("%d",&n); for(int i = 1;i <= n;i++){ scanf("%d %d",&l,&r); printf("Case #%d: %d\n",i,ans[r] - ans[l-1]); } return 0; }