神奇的素数II

1.1k 词

题目描述

zls对既是素数又是回文的数特别感兴趣。比如说151既是素数又是个回文。现在chshru想要你帮助他找出某个范围内的素数回文数,请你写个程序找出 a 跟b 之间满足条件的数。$(5 <= a < b <= 100,000,000)$; 

输入

这里有许多组数据,每组包括两组数据a跟b。

输出

对每一组数据,按从小到大输出a,b之间所有满足条件的素数回文数(包括a跟b)每组数据之后空一行。

样例输入

1
5 500

样例输出

1
2
3
4
5
6
7
8
9
10
11
12
5
7
11
101
131
151
181
191
313
353
373
383

题解

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#include <stdio.h>
#include <string.h>
#define Max 10000000
bool isPrime[Max];
int a[1000];
int n;
void getPrime() {
memset(isPrime, true, sizeof(isPrime));
for (int i = 2; i < Max; i++) {
if (isPrime[i]) {
for (int j = i + i; j < Max; j += i)
isPrime[j] = false;
}
}
}
bool isPalindrome(int x) {
int y = 0, temp = x;
while (x) {
y = y * 10 + x % 10;
x /= 10;
}
return temp == y;
}
void creatPP() {
n = 0;
getPrime();
a[n++] = 2;
for (int i = 3; i < Max; i += 2) {
if (isPrime[i] && isPalindrome(i))
a[n++] = i;
}
}
int main() {
int x, y;
creatPP();
while (~scanf("%d %d", &x, &y)) {
for (int i = 0; i < n; i++) {
if (a[i] < x)
continue;
else if (a[i] > y)
break;
else
printf("%d\n", a[i]);
}
printf("\n");
}
return 0;
}