题目描述 https://www.luogu.org/problemnew/show/P1217
题目的范围是5到1e8,但是只需要到1e7就好了,因为偶数位数的回文数除了11都是质数,因为他们都是11整数倍。
先用埃氏筛法得出质数,在判断是否为回文数。
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int N=1e7+5;
int a,b,vis[N],prime[N],pp[N],cnt;
bool jud(int x)
{
int y=x,sum=0;
while(y!=0)
{
sum=sum*10+y%10;
y/=10;
}//判断是否为回文数
if(sum==x) return 1;
else return 0;
}
int main()
{
scanf("%d%d",&a,&b);
if(b>1e7) b=1e7;//偶位数回文数除11都不是质数
for(int i=2;i<=b;i++)
{
if(!vis[i]) prime[cnt++]=i,pp[i]=1;
for(int j=0;j<cnt&&i*prime[j]<=b;j++)
{
vis[i*prime[j]]=i;
if(i%prime[j]==0) break;
}
}
for(int i=a;i<=b;i++)
if(pp[i]&&jud(i)) printf("%d\n",i);
return 0;
}