5 500
5 7 11 101 131 151 181 191 313 353 373 383
其实这个题还是蛮坑的题目,题目中的数据范围直接吓死宝宝了,参考了大牛的代码,学会了思维。这里详解一下。
首先这个题目是要判断回文素数,表示这个数是回文数,也是素数,我直接想到的是打印素数表,但是好像数据范围有点大,数组绝壁会MLE.然后就默默的用这样的方法来判断是否为素数:
int isprime(int a) { int i; for(i=2;i*i<=a;i++) if(a%i==0)return 0; return 1; }
所谓回文数,可以利用其对称性来判断是否为回文数,当然也可以用整个数倒过来的方式判断 ,这里给出实例:
121 倒过来还是121.但是如果是321倒过来是123就不是回文数,所以这里我们利用特性,来判断是否为回文数。
int huiwen(int a) { int i=a,s=0; while(i) { s=s*10+i%10; i/=10; } if(a==s)return 1; return 0; }
这里上AC完整代码:
#include <iostream> #include<stdio.h> using namespace std; int isprime(int a) { int i; for(i=2;i*i<=a;i++) if(a%i==0)return 0; return 1; } int huiwen(int a) { int i=a,s=0; while(i) { s=s*10+i%10; i/=10; } if(a==s)return 1; return 0; } int main (void) { int a,b; while(scanf("%d%d",&a,&b)!=EOF) { for(int i=a;i<=b&&i<=9989899;i++) if(huiwen(i)&&isprime(i))printf("%d\n",i); printf("\n"); } return 0; }