题目描述
151 既是一个质数,又是一个回文数,因此它可以被称为回文质数。
现在给定两个整数 a,b ,请你找出在 [a,b] 范围内的所有回文质数。
输入格式
共一行,包含两个整数 a,b。
输出格式
按照从小到大的顺序输出所求范围内的所有回文质数。
每个数占一行。
数据范围
5≤a<b≤108
样例
输入样例:
5 500
输出样例:
5
7
11
101
131
151
181
191
313
353
373
383
算法
(暴力枚举)
#include <iostream>
#include <cmath>
#include <algorithm>
using namespace std;
bool isPalindromes(int x) //判断回文数
{
int m=0,n=x;
while (n)
{
m=m*10+n%10; //反向求和
n /=10; //删除最后一位
}
if (m==x) return true;
return false;
}
bool isPrime(int x) //判断质数
{
for (int i=3;i<=sqrt(x);i=i+2) //优化:因为a从5开始,即所有的质数都为奇数(除了2)
{
if (x%i==0) return false;
}
return true;
}
int main ()
{
int a,b;
cin >>a>>b;
if (a%2==0) a++; //优化:因为a从5开始,即所有的质数都为奇数(除了2)
if (b >= 10000000) b = 9999999; //重要剪枝:8位的回文数肯定不是质数
for (int i=a;i<=b;i=i+2)
{
if (isPalindromes(i) && isPrime(i))
cout<<i<<endl;
}
return 0;
}