因为151既是一个质数又是一个回文数(从左到右和从右到左是看一样的),所以 151 是回文质数。
写一个程序来找出范围[a,b](5 <= a < b <= 100,000,000)( 一亿)间的所有回文质数;
INPUT FORMAT:
(file pprime.in)
第 1 行: 二个整数 a 和 b .
OUTPUT FORMAT:
(file pprime.out)
输出一个回文质数的列表,一行一个。
input:
5 500
output:
5
7
11
101
131
151
181
191
313
353
373
383
【参考程序】:
/*
ID: XIONGNA1
PROG: pprime
LANG: C++
*/
#include<iostream>
#include<cmath>
#include<cstdlib>
using namespace std;
int prime[111000];
int a,b,ans,p;
bool check(int x)
{
for (int i=2;i<=(int) sqrt(x*1.0);i++)
if (x%i==0) return false;
return true;
}
int main()
{
ans=3;
prime[1]=5;prime[2]=7;prime[3]=11;
for (int x1=1;x1<=9;x1++)
for (int x2=0;x2<=9;x2++)
{
p=x1*101+x2*10;
if (check(p))
{
ans++;prime[ans]=p;
}
}
for (int x1=1;x1<=9;x1++)
for (int x2=0;x2<=9;x2++)
for (int x3=0;x3<=9;x3++)
{
p=x1*10001+x2*1010+x3*100;
if (check(p))
{
ans++;prime[ans]=p;
}
}
for (int x1=1;x1<=9;x1++)
for (int x2=0;x2<=9;x2++)
for (int x3=0;x3<=9;x3++)
for (int x4=0;x4<=9;x4++)
{
p=x1*1000001+x2*100010+x3*10100+x4*1000;
if (check(p))
{
ans++;prime[ans]=p;
}
}
freopen("pprime.in","r",stdin);
freopen("pprime.out","w",stdout);
scanf("%d%d",&a,&b);
if (a>b){int t;t=a;a=b;b=t;}
int j=1;
while (j<=ans && prime[j]<a) j++;
while (j<=ans && prime[j]<=b)
{
printf("%d\n",prime[j]);
j++;
}
return 0;
}