看到素数又想到了素数打表。但这题数据太大,恐怕还没输入就超时了。彻底不知道怎么办,看来discussion才知道最大素数回文。
还有些人直接打表,简直是碉堡了!不过我以向不喜欢这样的死算法。
好了废话小说,知道最大的回文素数(9989899)这样就好办了,开个bool型数组还是过的去的,线性打素数表无压力了。
代码:(220ms)
#include<stdio.h>
#include<math.h>
#define M 9989900
bool p[M]; //防止超内存,不能为int型,这样就超内存了。
int num[100001];
void prime() //线性筛选。
{
for(int i=4;i<M;i+=2){
p[i]=1;
}
int k=(int)sqrt(M);
for(int i=3;i<=k;i+=2){
if(p[i]) continue;
for(int j=i*i;j<M;j+=2*i)
p[j]=1;
}
}
bool judge(int m){
int t=m,b=0;
while(t){ //跌倒顺序
b*=10;
b+=t%10;
t/=10;
}
return b==m;
}
int main()
{
int i,j,a,b;
prime();
for(i=5;i<M;i+=2)
if(!p[i]&&judge(i))
num[j++]=i;
while(scanf("%d %d",&a,&b)!=EOF){
for(i=0;i<=j;i++){
if(num[i]<a) continue;
else if(num[i]<=b) printf("%d\n",num[i]);
else break;
}
puts("");
}
return 0;
}