素数回文
xiaoou33对既是素数又是回文的数特别感兴趣。比如说151既是素数又是个回文。现在xiaoou333想要你帮助他找出某个范围内的素数回文数,请你写个程序找出 a 跟b 之间满足条件的数。(5 <= a < b <= 100,000,000);
Input
这里有许多组数据,每组包括两组数据a跟b。
Output
对每一组数据,按从小到大输出a,b之间所有满足条件的素数回文数(包括a跟b)每组数据之后空一行。
Sample Input
5 500
Sample Output
5
7
11
101
131
151
181
191
313
353
373
383
#include <stdio.h>
#include <memory.h>
#include <stdbool.h>
#define MAX 9989899+1// 最大的回文素数 9989899
bool is_prim[MAX+1]; //数组开到这么大
void prim()//素数筛
{
int i,j;
memset(is_prim,true,sizeof(is_prim));//必须用bool
for(i=2;i<=MAX;i++)
{
if(is_prim[i])
{
for(j=i+i;j<=MAX;j+=i)
{
is_prim[j]=false;//非素数
}
}
}
}
int huiwen(int n)//判断回文 倒过来是否相等
{
int m,z=0,t;
m=n;
while(m)
{
t=m%10;
z=z*10+t;
m/=10;
}
if(z==n) return 1;
else return 0;
}
int main()
{
int a,b,i;
prim();
while(scanf("%d%d",&a,&b)!=EOF)
{
for(i=a;i<=b&&i<=9989899;i++) //注意判断i不超过9989899
{
if(huiwen(i)&&is_prim[i]==true)// 因为数组就这么大
{
printf("%d\n",i);
}
}
printf("\n");
}
return 0;
}