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