hdu 1431 素数回文

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;

}

posted @ 2011-08-04 22:09  ○o尐懶錨o  阅读(898)  评论(1编辑  收藏  举报