#include <string> #include <stdio.h> #include <cmath> #include <iostream> using namespace std; bool flag[800]; void primmake() //使用筛选法构造素数表 { memset(flag,0,sizeof(flag)); flag[1]=1; for(int i=2;i<=800;i++) { if(!flag[i]){ for(int j=2;i*j<=800;j++)flag[i*j]=1; } } } int sumdigit(int x){ int sum=0; while(x){ sum+=x%10; x/=10; } return sum; } int sqdigit(int x){ int sum=0; while(x){ sum+=(x%10)*(x%10); x/=10; } return sum; } bool luck(int x){ int sum0=sumdigit(x); int sum1=sqdigit(x); if(!flag[sum0] && !flag[sum1])return 1; return 0; } int lucky(int x,int y) { int cnt=0; for(int i=x;i<=y;i++){ if(luck(i))cnt++; } return cnt; } //start 提示:自动阅卷起始唯一标识,请勿删除或增加。 int main() { //main函数方便你自行测试,可不用完成 primmake(); cout<<lucky(1,20)<<endl; return 0; }