题目来源:http://116.56.140.75:8000/JudgeOnline/problem.php?id=1731
1731: 回文素数(基础版)
时间限制: 1 Sec 内存限制: 64 MB题目描述
11是一个回文素数.因为它不仅是素数,同时还是回文数(回文数,即把一个数字正着读或者倒着读都是一样的,如121,1331等都是回文数). 现在写一个程序把a的b之间所有的回文素数都找出来(2≤a<b≤100,000).
输入
第一行,一个整数N(N<10) 以下N行,每行两个整数a,b.
输出
输出回文素数的列表,每行一个,按从小到大的顺序输出.
样例输入
1
5 200
样例输出
5
7
11
101
131
151
181
191
解析:判断是素数,而且是回文数
代码:
#include<iostream>
#include<cmath>
using namespace std;
bool check(int num)
{
int a[20] = {};
int i = 0;
while (num != 0)
{
a[i++] = num % 10;
num /= 10;
}
for (int j = 0; j < i / 2; j++)
{
if (a[j] != a[i - j - 1])
return 0;
}
return 1;
}
bool _prime(int num)
{
if (num == 2)
return 1;
else if (num % 2 == 0)
return 0;
for (int i = 3; i <= sqrt(num) + 1e-6; i += 2)
{
if (num%i == 0)
return 0;
}
return 1;
}
void display(int x, int y)
{
for (int i = x; i <= y; i++)
{
if (check(i) == true && _prime(i) == true)
cout << i << endl;
}
}
int main()
{
int n;
cin >> n;
int x, y;
while (n--)
{
cin >> x >> y;
display(x, y);
}
}
/**************************************************************
Problem: 1731
User: 201730685257
Language: C++
Result: 正确
Time:0 ms
Memory:1496 kb
****************************************************************/