分析:先生成回文数,在判断是不是质数;生成回文数的方法很巧妙,在网上找的资料
#include<iostream> #include<cstdio> #include<math.h> using namespace std; int palind_prime[10000]; bool is_prime(int a) { for(int i=2;i<=(int)sqrt(a+0.5);i++) { if(a%i==0) return false; } return true; } int main() { int c=1,temp; for(int i=5;i<=9;i++)//一位数 { temp=i; if(is_prime(temp)) palind_prime[c++]=temp; } for(int i=1;i<=9;i++)//两位数 { temp=11*i; if(is_prime(temp)) palind_prime[c++]=temp; } for(int i=1;i<=9;i++)//三位数 { for(int j=0;j<=9;j++) { temp=101*i+10*j; if(is_prime(temp)) palind_prime[c++]=temp; } } for(int i=1;i<=9;i++)//四位数 { for(int j=0;j<=9;j++) { temp=1001*i+110*j; if(is_prime(temp)) palind_prime[c++]=temp; } } for(int i=1;i<=9;i++)//五位数 for(int j=0;j<=9;j++) for(int k=0;k<=9;k++) { temp=10001*i+1010*j+100*k; if(is_prime(temp)) palind_prime[c++]=temp; } for(int i=1;i<=9;i++)//六位数 for(int j=0;j<=9;j++) for(int k=0;k<=9;k++) { temp=100001*i+10010*j+1100*k; if(is_prime(temp)) palind_prime[c++]=temp; } for(int i=1;i<=9;i++)//七位数 for(int j=0;j<=9;j++) for(int k=0;k<=9;k++) for(int t=0;t<=9;t++) { temp=1000001*i+100010*j+10100*k+1000*t; if(is_prime(temp)) palind_prime[c++]=temp; } /* printf("%d\n\n",c-1); for(int i=1;i<c;i++) { printf("%d ",palind_prime[i]); if(i%10==0) printf("\n"); }*/ int a,b; while(scanf("%d %d",&a,&b)!=EOF) { int left,right; for(int i=1;i<c;i++) if(palind_prime[i]>=a) { left=i; break; } for(int i=c-1;i>=1;i--) if(palind_prime[i]<=b) { right=i; break; } for(int i=left;i<=right;i++) printf("%d\n",palind_prime[i]); printf("\n"); } system("pause"); return 0; }