xiaoou33对既是素数又是回文的数特别感兴趣。比如说151既是素数又是个回文。现在xiaoou333想要你帮助他找出某个范围内的素数回文数,请你写个程序找出 a 跟b 之间满足条件的数。(5 <= a < b <= 100,000,000);
Input:这里有许多组数据(不超过10组),每组包括两组数据a跟b。
Output:对每一组数据,按从小到大输出a,b之间所有满足条件的素数回文数(包括a跟b)。
素数筛,不然会时间超限....规定范围大小,不然会内存超限......
#include<bits/stdc++.h>
using namespace std;
#define maxn 9989899+1//规定的这个上限很重要,不然内存超限......
int vis[maxn];
int target[1000];
void sieve()//埃式筛
{
vis[0]=1;vis[1]=1;
vis[2]=0;
for(int i=4;i<=maxn;i+=2)
vis[i]=1;
for(int i=3;i*i<=maxn;i+=2)
{
if(!vis[i])
{
for(int j=i;j*i<=maxn;j++)
{
vis[j*i]=1;
}
}
}
}
bool huiwen(int x)
{
int res=0;
int k=x;
while(x)
{
res=res*10+x%10;
x/=10;
}
if(res==k)
return true;
else
return false;
}
int main()
{
sieve();//预处理筛素数
int j=0;
for(int i=2;i<maxn;i++)
{
if(!vis[i]&&huiwen(i))
target[j++]=i;
}
int a,b;//以上均在预处理
while(~scanf("%d %d",&a,&b))
{
for(int i=0;i<j;i++)
{
if(target[i]<a)
continue;
else if(target[i]>b)
break;
else
cout<<target[i]<<endl;
}
}
return 0;
}