偶数位数回文数(除11)必定不是质数(自行百度),所以只要运行到10000000
1 #include<cstdio> 2 #include<iostream> 3 4 using namespace std; 5 6 int a, b; 7 const int maxn = 10000005; 8 9 int cnt; 10 int prime[maxn]; 11 int vis[maxn]; 12 bool pp[maxn]; 13 14 inline void is_prime(){ 15 for(int i = 2; i <= b; i++){ 16 if(!vis[i]) prime[++cnt] = i, pp[i] = 1; 17 for(int j = 1; j <= cnt && i * prime[j] <= b; j++){ 18 vis[i * prime[j]] = true; 19 if(i % prime[j] == 0) break; 20 } 21 } 22 }//欧拉筛判断质数 23 24 inline int hui_wen(int x){ 25 int t = 0; 26 int y = x; 27 while(y != 0){ 28 t = t * 10 + y % 10; 29 y = y / 10; 30 } 31 if(t == x) return 1; 32 return 0; 33 }//判断回文数 34 35 int main(){ 36 scanf("%d%d", &a, &b); 37 if(b > 10000000) b = 10000000;//重点 38 is_prime(); 39 for(int i = a; i <= b; i++){ 40 int n = i; 41 if(hui_wen(n) && pp[n] ) printf("%d\n", n); 42 } 43 return 0; 44 }
洛谷 P1217 [USACO1.5]回文质数 Prime Palindrome
原文:https://www.cnblogs.com/New-ljx/p/10686537.html