题目链接:http://soj.me/4190
要点:1 判断回文不能用字符串 2 判断质数时外循环终止条件用sqrt(MAX) 3判断质数时内循环的起始条件用i * i 4将回文质数全部存储出来
#include<iostream>
#include<string>
#include<cmath>
#include<memory.h>
const int MAX = 10000005;
bool visited[MAX];
int result[MAX];
int num = 0;
using namespace std;
bool judge(int a)
{
int t = a;
int b = 0;
while(a != 0)
{
b = b * 10 + a % 10;
a = a / 10;
}
return t == b;
}
void judge2()
{
for(int i = 2 ; i <= sqrt(MAX) ; i ++)
if(!visited[i])
{
for(int j = i * i ; j <= MAX ; j += i)
visited[j] = true;
}
for(int i = 2 ; i < MAX ; i ++)
if(!visited[i] && judge(i))
result[num ++] = i;
}
int main()
{
int a,b;
memset(visited,0,sizeof(visited));
judge2();
cin >> a >> b;
while(a != 0 && b != 0)
{
for(int i = 0 ; i < num ; i ++)
if(result[i] >= a && result[i] <= b)
cout << result[i] << endl;
cin >> a >> b;
}
}