http://acm.hdu.edu.cn/showproblem.php?pid=1431
run了好几次,当自己郁闷的时候突然看到了一句话,偶数位的回文串都可以被11整除当然要除了11,说明八位的数据可以全部忽略从9989899开始,这样问题就简单多了,减少了很多数的筛选与数组的空间,我们还可以先去除所有的偶数位的数再来筛选,这样可能更简单,看过还有打表的,真是佩服。。。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
bool p[9989900];
int d[100000],k;
void prim()
{
for(int i=0;i<=3163;++i)
{
p[i]=0;
}
k=0;
for(int i=2;i<=3163;++i)//素数筛选法
{
if(!p[i])
{
for(int j=i*i;j<=9989899;j+=i)
p[j]=1;
}
}
}
bool mm(int x)
{
int t=x,v=0;
while(t)
{
v=v*10;
v+=t%10;
t=t/10;
}
return x==v;
}
int main()
{
int a,b,i;
k=0;
prim();
for(int i=5;i<=9989899;++i)
if(!p[i]&&mm(i))
d[k++]=i;
while(scanf("%d%d",&a,&b)!=EOF)
{
for(int i=0;i<k;++i)
{
if(d[i]<a) continue;
else if(d[i]<=b) printf("%d\n",d[i]);
else
break;
}
printf("\n");
}
// system("pause");
return 0;
}