题目链接HDU - 1431
题意:给定一个范围,输出范围内所有回文素数,数据范围1e8
思路:直接先跑个1e8找1e8内的最大回文素数,9989899,这样就缩小了很多范围。
然后注意这题会卡一个判断顺序的时间,判断一个数是否为回文素数时,需要先判断他是不是回文数,在判断是否是素数,因为判断回文数只需要跑位数次。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<cmath>
#include<algorithm>
using namespace std;
int judge(int n)
{
if(n == 2)
{
return 1;
}
for(int i = 2; i*i <= n; i++)
{
if(n % i == 0)
{
return 0;
}
}
return 1;
}
int Find(int n)//是否是回文数,比较巧妙的方法
{
int m = 0,t = n;
while(t)
{
m = m * 10 + t % 10;
t /= 10;
}
if(m == n) return 1;
return 0;
}
int main()
{
int n,m;
while(cin >> n >> m)
{
for(int i = n; i <= m && i <= 9989899; i++)
{
if (Find(i) && judge(i)) cout << i << endl;
}
cout << endl;
}
}