2457 - 回文质数
因为151即是一个质数又是一个回文数(从左到右和从右到左是看一样的),所以 151
号是回文质数。
写一个程序来找出范围[a,b](5 <= a < b <= 100,000,000)间的所有回文质数;
题目输入
第 1 行: 二个整数 a 和 b .
输入包含多组测试数据
题目输出
输出一个回文质数的列表,一行一个。
输入/输出样例
题目输入
5 500
题目输出
5 7 11 101 131 151 181 191 313 353 373 383
C++解答
#include <stdio.h> #include <math.h> int main() { long c[50000]={0}; int u=0; for(int i=1;i<=10;i+=2){ if(i==5) continue; for(int j=0;j<=9;j++){ c[u++]=(i*1000+i*1)+(j*100+j*10); c[u++]=(i*100+i*1)+(j*10); for(int k=0;k<=9;k++){ c[u++]=(i*100000+i*1)+(j*10000+j*10)+(k*1000+k*100); c[u++]=(i*10000+i*1)+(j*1000+j*10)+(k*100); for(int r=0;r<=9;r++){ c[u++]=(i*10000000+i*1)+(j*1000000+j*10)+(k*100000+k*100)+(r*10000+r*1000); c[u++]=(i*1000000+i*1)+(j*100000+j*10)+(k*10000+k*100)+(r*1000); } } } } c[u++]=11;c[u++]=7;c[u++]=5;c[u++]=3;c[u]=2; long d[5000]={0}; int q=0; for(int w=0;w<=u;w++){ int flag=0; for(int j=2;j<=sqrt(double(c[w]));j++){ if(c[w]%j==0) {flag=1; break;} } if(flag==0) d[q++]=c[w]; } long temp=0;/*排序过程*/ for(int i=0;i<q;i++) for(int j=1;j<q-i;j++) if(d[j]<d[j-1]){ temp=d[j-1]; d[j-1]=d[j]; d[j]=temp; } long a,b; while(scanf("%d%d",&a,&b)!=EOF){ for(int p=0;p<q;p++){ if(d[p]>=a&&d[p]<=b) printf("%ld\n",d[p]); } } return 0; }