因为 151 既是一个质数又是一个回文数(从左到右和从右到左是看一样的),所以 151 是回文质数。 写一个程序来找出范围 [a,b] (5
\le a < b \le 100,000,000)a,b( 一亿)间的所有回文质数。
#include <iostream>
#include <cmath>
#include <string.h>
using namespace std;
bool huiwen(int n);
bool huiwen(int n)
{
int num = 0;
for (int y = n; y != 0; y /= 10)
num = num * 10 + y % 10;
if (num == n)
return true;
else
return false;
}
// 用埃氏筛法生成质数表
void prime(int b)
{
bool *book = new bool[b+1];d
//初始化,默认全部都是质数
memset(book, true, sizeof(book));
book[1] = false; //1不是质数
int n = sqrt(b);
for (int i = 2; i <= n; i++)
{
if (book[i])
{
for (int j = 2; j <= b / i; j++)
book[i * j] = false; // i*j<=b
}
}
}
int main()
{
int a, b;
cin >> a >> b;
if (b >= 10000000)
b = 9999999;
bool *book = new bool[b+1];
//初始化,默认全部都是质数
memset(book, true, sizeof(book));
book[1] = false; //1不是质数
int n = sqrt(b);
for (int i = 2; i <= n; i++)
{
if (book[i])
{
for (int j = 2; j <= b / i; j++)
book[i * j] = false; // i*j<=b
}
}
if (a % 2 == 0)
a++; //除了2以外,2的倍数不可能是质数
for (int i = a; i <= b; i += 2)
{
if (book[i] && huiwen(i))
cout << i << endl; //如果既是质数同时也是回文数,就输出。
}
delete[] book;
system("pause");
return 0;
}