hdu 1431 素数回文

本文介绍了一个C++程序,该程序用于生成指定范围内的素数回文数。通过高效的筛法预先标记非素数,并使用逆向构造法判断回文特性,此程序能够快速输出用户指定区间内的所有奇数素数回文数。
#include<iostream>
using namespace std;
bool pri[10000000];
long long l,r;
long long p[1000000];
void judge()
{
   memset(pri,0,sizeof(pri)); 
   for(long long i=3;i<=3163;i+=2)
   {
     if(pri[i]==1) continue;
     for(long long j=i*i;j<=10000000;j+=i)
     {
       pri[j]=1;
     }
   }
   pri[6]=1;
   pri[8]=1;
}

bool huiwen(long long a)
{
  long long b=0;
  long long temp=a;
  while(temp)
  {
    b=b*10;
    int c=temp%10;
    b=b+c;
    temp=temp/10;
  }
  return a==b;
}
  
int main()
{
    judge();
    int index=0;
    for(long long i = 5;i<=10000000;i++)
    {
       if(!pri[i] && huiwen(i)&&i%2==1)
         p[index++] = i;
    }
   while(cin>>l>>r)
   {
       if(l>r)
       {
         int t=l;
         l=r;
         r=t;
       }
      for(long long i=0;i<=index;i++)
      {
         if(p[i]<l) continue;
         if(p[i]>r) break;
           cout<<p[i]<<endl; 
      }
      cout<<endl;
   }
   return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值