P1217 [USACO1.5]回文质数 Prime Palindromes
题目描述
因为 151 既是一个质数又是一个回文数(从左到右和从右到左是看一样的),所以 151 是回文质数。
写一个程序来找出范围 [a,b] (5 <=a < b <= 100,000,000)( 一亿)间的所有回文质数。
输入格式
第 1 行: 二个整数 a 和 b .
输出格式
输出一个回文质数的列表,一行一个。
输入输出样例
输入
5 500
输出
5
7
11
101
131
151
181
191
313
353
373
383
代码的实现
#include<iostream>
#include<cmath>
using namespace std;
int n,m;
int dis[10000];
int zhishu(int a){ //质数判断
if(a==2)return 1;
for(int i=2;i<=sqrt(a);i++){
if(a%i==0)
return 0;
}
return 1;
}
int huiwen(int ma){ //回文数判断
int s[100000];
int sum=0,b;
b=ma;
while(b){
sum=sum*10+b%10; //回文判断的关键点
b=b/10;
}
if(ma==sum)
return 1;
else return 0;
}
int main(){
cin>>n>>m;
for(int i=n;i<=m;i++){
if(i==9989900)break; //在这之后没有数据符合条件
if(huiwen(i)&&zhishu(i)){
cout<<i<<endl;
}
}
return 0;
}
注意事项
在一个一个数的判断过程中,可以跳过偶数去判断(偶数必定不是质数,2除外)。
要多优化代码防止超时。