hoj 1004 Prime Palindromes 回文素数

/*

晕,弄少了九位数的那段

据说偶数位的话,除了11是回文素数以外,其他均可被11整除并且是合数,

然后就枚举1位3位5位7位9位数的数,然后判断是否为素数即可

*/

#include <iostream>

#include <cmath>

using namespace std;

long long a,b;

bool judge(long long x)

{

   for(int i=2;i<=(int)sqrt(x*1.0);i++)

      if(x%i==0)

         return false;

   return true;

}

void solve()

{

   long long ans;

   if(a<10)    //1位素数和11

   {

      for(int i=a;i<10;i++)

      {

         if(i>b)

            return;

         if(judge(i))

            cout<<i<<endl;

      }

      cout<<11<<endl;

   }

   if(b>100)       //3位数时

      for(int i=1;i<=9;i+=2)

         for(int j=0;j<=9;j++)

         {

            ans = i*101+j*10;

            if(ans>=a&&ans<=b&&judge(ans))

                cout<<ans<<endl;

            if(ans>=b)

                return;

         }

 

   if(b>10000)        //5位数时

      for(int i=1;i<=9;i+=2)

         for(int j=0;j<=9;j++)

            for(int k=0;k<=9;k++)

            {

                ans = i*10001+j*1010+k*100;

                if(ans>=a&&ans<=b&&judge(ans))

                   cout<<ans<<endl;

                if(ans>=b)

                   return;

            }

 

   if(b>1000000)         //7位数时

   {

      for(int i=1;i<=9;i+=2)

         for(int j=0;j<=9;j++)

            for(int k=0;k<=9;k++)

                for(int m=0;m<=9;m++)

                {

                   ans = i*1000001+j*100010+k*10100+m*1000;

                   if(ans>=a&&ans<=b&&judge(ans))

                      cout<<ans<<endl;

                   if(ans>=b)

                      return;

                }

   }

   if(b>100000000)       //9位数时

   {

      for(int i=1;i<=9;i+=2)

         for(int j=0;j<=9;j++)

            for(int k=0;k<=9;k++)

                for(int m=0;m<=9;m++)

                   for(int r=0;r<=9;r++)

                   {

                      ans = i*100000001+j*10000010+k*1000100+m*101000+r*10000;

                      if(ans>=a&&ans<=b&&judge(ans))

                         cout<<ans<<endl;

                      if(ans>=b)

                         return;

                   }

   }

}

int main()

{

   freopen("sum.in","r",stdin);

   freopen("sum.out","w",stdout);

   while(cin>>a>>b)

   {

      if(a>b)

         swap(a,b);

      solve();

   }

   return 0;

}

 

转载于:https://www.cnblogs.com/yejinru/archive/2012/03/22/2412206.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值