- Description
因为151既是一个质数又是一个回文数(从左到右和从右到左是看一样的),所以 151 是回文质数。
写一个程序来找出范围[a,b](5 <= a < b <= 100,000,000)( 一亿)间的所有回文质数;
- Input
多组输入数据
第 1 行: 二个整数 a 和 b .
- Output
输出一个回文质数的列表,一行一个。
- Sample Input
5 500
- Sample Output
5
7
11
101
131
151
181
191
313
353
373
383
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int isprime(int s)
{
int i;
if(s==5||s==7)return 1;
if(s%2==0||s%3==0)
return 0;
for( i=2;i*i<=s;i++)
if(s%i==0)return 0;
return 1;
}
int main()
{
// freopen("in.txt","r",stdin);
// freopen("out.txt","w",stdout);
int ans[800]={0},an=0;
int i,j,a=0,b=0,t,y,aa,bb,s,T,m,n,count=0,k;
char c[8];
for(i=1;i<=7;i++)
{
if(i>2&&i%2==0)continue;
t=(i+1)/2;
s=(int)pow(10,t-1);T=s*10;
for(s;s<T;s++)
{
itoa(s,c,10);
for(j=i-1;j>=t;j--)
c[j]=c[i-j-1];
c[i]=0;
y=atoi(c);
if(y>=5&&y<=10000000&&isprime(y))
ans[an++]=y;
}
}
while(scanf("%d%d",&aa,&bb)!=EOF)
{
for(i=0;ans[i]<aa;i++);
for(j=i;ans[j]<=bb&&j<an;j++);
for(k=i;k<j;k++)
printf("%d\n",ans[k]);
}
return 0;
}