Prime Palindromes 回文质数

版权声明:莉莉莉 https://blog.csdn.net/qq_41700151/article/details/82843650

Description

因为151即是一个质数又是一个回文数(从左到右和从右到左是看一样的),所以 151 号是回文质数。 写一个程序来找出范围[a,b](5 <= a < b <= 100,000,000)间的所有回文质数;
Input

第 1 行: 二个整数 a 和 b
Output

输出一个回文质数的列表,一行一个。
Sample Input

5 500

Sample Output

5
7
11
101
131
151
181
191
313
353
373
383

思路:因为数据量太太太大了,要从质数里面找回文数,所以就只能找所有的回文数然后再判断是不是质数啦,那么100,000,000之内的回文数也没有办法找,就构造吧,从10开始构造就可以了,就是101,11就是111,12就是121,所以从10构造到10000之内的就可以了,再判断是否是素数。
代码:

#include <iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
#define INF 0x3f3f3f3f
#define memset(a,b) memset(a,b,sizeof(a))
using namespace std;
int zz[800];
int prime(int n)
{
    for(int i=2; i*i<=n; i++)
        if(n%i==0)
            return 0;
    return 1;
}
int huiwen(int n)
{
    int ans=n/10;
    while(n)
    {
        ans=ans*10+n%10;
        n/=10;
    }
    return ans;
}
int main()
{
    int a,b;
 
  //  int d=0
      int d=0;
    scanf("%d%d",&a,&b);
        int logo=0;
    if(a<12)
    {
       for(int i=a; i<=11; i++)
               if(prime(i)==1)
               {
                   zz[logo++]=i;
                   d++;
               }
    }
    int ans;
 
    for(int i=10; i<=10000; i++)
    {
        ans=huiwen(i);
        if(prime(ans)==1)
        {
            zz[logo++]=ans;
           d++;
        }
    }
    for(int i=0;i<logo;i++)
      {
          if(zz[i]>=a&&zz[i]<=b)
            printf("%d\n",zz[i]);
      }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_41700151/article/details/82843650