我先用线性筛把素数表打出来,然后在这个[a,b]范围里求回文数
#include<stdio.h>
#include<string.h>
#include<stdbool.h>
bool judge[100000005];
int prime[100000000];
int s=0;
int judgeprime(int n)
{
memset(judge,1,sizeof(judge));
for(int i=2;i<=n;i++)
{
if(judge[i])
{
prime[++s]=i;
}
for(int j=1;j<=s;j++)
{
if(i*prime[j]>n)
{
break;
}
judge[i*prime[j]]=0;
if(i%prime[j]==0)
{
break;
}
}
}
return s;
}
int HWS(int a)
{
int d=a,c=0;
int Q[15];
for(;;c++)
{
Q[c]=d%10;
d=d/10;
if(d==0)
{
break;
}
}
for(int v=0;v<=c;v++)
{
if(Q[v]!=Q[c-v])
break;
if(v>=c/2)
{
return 1;
break;
}
}
return 0;
}
int main()
{
int a,b;
do
{
scanf("%d%d",&a,&b);
}while(a<5||b>100000000);
judgeprime(b);
for(int i=1;i<=s;i++)
{
if(prime[i]<a)
{
continue;
}
if(HWS(prime[i]))
{
printf("%d\n",prime[i]);
}
}
return 0;
}