题目描述
zls对既是素数又是回文的数特别感兴趣。比如说151既是素数又是个回文。现在chshru想要你帮助他找出某个范围内的素数回文数,请你写个程序找出 a 跟b 之间满足条件的数。$(5 <= a < b <= 100,000,000)$;
输入
这里有许多组数据,每组包括两组数据a跟b。
输出
对每一组数据,按从小到大输出a,b之间所有满足条件的素数回文数(包括a跟b)每组数据之后空一行。
样例输入
5 500
样例输出
5
7
11
101
131
151
181
191
313
353
373
383
题解
#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;
}