『算法-ACM 竞赛』洛谷 P1217 回文质数
题目描述
因为 151 既是一个质数又是一个回文数(从左到右和从右到左是看一样的),所以 151 是回文质数。
写一个程序来找出范围 [a,b] (5 \le a < b \le 100,000,000)a,b( 一亿)间的所有回文质数。
输入格式
第 1 行: 二个整数 a 和 b .
输出格式
输出一个回文质数的列表,一行一个。
输入输出样例
输入 #1 复制
5 500
输出 #1 复制
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
| #include<iostream> #include<cstdio> #include<cstring> #include<string> #include<cstring> #include<sstream> #include <algorithm> using namespace std; const int maxn=9989999; bool isprime[maxn]; void prime(int o); bool hw(string tem); int main() { int a,b; cin>>a>>b; if(b>maxn) b=maxn-1; prime(b); for(int i=a;i<=b;i++) { if(isprime[i]) { stringstream ob; ob<<i; string y; ob>>y; if(hw(y))printf("%d\n",i); } } } bool hw(string tem) { string w=tem; reverse(w.begin(),w.end()); return (w==tem); } void prime(int w){ for(int i=0;i<=w;i++) isprime[i]=true; isprime[0]=isprime[1]=false; for(int i=2;i<=w;i++){ if(isprime[i]){ for(int j=2*i;j<=w;j+=i){ isprime[j]=false; } } } }
|