素数回文

#include <iostream>
#include <cmath>
using namespace std;
bool is[10000001];
int prm[663969];
int huiwenn[1000],r;
int getprm(int n)
{
    int i,j,k=0;
    int s,e=(int)(sqrt(0.0+n)+1);
    memset(is,1,sizeof(is));
    prm[k]=2;k++;is[0]=is[1]=0;
    for(i=4;i<n;i+=2)
        is[i]=0;
    for(i=3;i<e;i+=2)
        if(is[i])
        {
            prm[k]=i;k++;
            for(s=i*2,j=i*i;j<n;j+=s)
                is[j]=0;
        }
    for(;i<n;i+=2)
        if(is[i])
        {
            prm[k]=i;
            k++;
        }
        return k;
}


void huiwen()
{
    int i,j,k,t;


    k=getprm(9989999);
    for(i=0;i<k;i++)
    {
        j=1;char a[19],*x,*y;
        sprintf(a,"%d",prm[i]);
        t=strlen(a);
   if(t!=4&&t!=6)
        {
    x=a;y=a+t-1;
    while(x<=y)
    {
     if(*x!=*y)
     {
      j=0;
      break;
     }
     x++;y--;
    }
    if(j)
    {
     huiwenn[r]=prm[i];
     r++;
    }
   }
    }
}
int main()
{
    int i,x,y;
    r=0;


    huiwen();


    while(~scanf("%d%d",&x,&y))
    {
        for(i=0;huiwenn[i]<=y;i++)
        {
            if(huiwenn[i]>=x)
                printf("%d\n",huiwenn[i]);


            if(huiwenn[i]==9989899)
                break;
        }
        printf("\n");
    }
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值