#include <stdio.h>
#include <memory.h>
#include <iostream>
#include <math.h>
using namespace std;
#define MAX 10000005
bool not_prime[MAX];
int res[MAX];
//判断是否为回文数
bool is_palindrome(int n)
{
int res = 0;
int temp;
int ori = n;
while (n != 0)
{
temp = n % 10;
n /= 10;
res *= 10;
res += temp;
}
//如果得到的结果与原来相等,则说明为回文数
if (res == ori)
return true;
return false;
}
//筛选法求素数,并对素数进行是否为回文数进行判断,然后存储在一个数组中
void generate()
{
memset(not_prime,0,sizeof(not_prime));
not_prime[0] = not_prime[1] = true;
//筛选法求素数
for (int i = 2; i <= sqrt(MAX); i++)
{
if (!not_prime[i])
{
//i为素数,则i的倍数则不是为素数
for (int j = i * i; j < MAX; j+=i)
not_prime[j] = true;
}
}
int counter = 0;
for (int k = 2; k < MAX; k++)
{
//将为素数并且是回文数的数存储在res数组中
if (!not_prime[k] && is_palindrome(k))
res[counter++] = k;
}
}
int main()
{
int a,b;
generate();//生成结果
while (scanf ("%d%d",&a,&b) && (a || b))
{
int i = 0;
//输出结果
while (res[i] < a)
i++;
while (res[i] <= b && res[i] != 0)
{
printf ("%d\n",res[i]);
i++;
}
}
return 0;
}
sicily 4190 Prime Palindromes
最新推荐文章于 2016-06-10 17:23:45 发布