NOJ-1163-素数回文

1163: 素数回文

Time Limit: 1 Sec  Memory Limit: 128 MB
Submit: 358  Solved: 119
[Submit][Status][BBS]

Description

小王对既是素数又是回文的数特别感兴趣。比如说151既是素数又是个回文。现在小王想要你帮助他找出某个范围内的素数回文数,请你写个程序找出 a 跟b 之间满足条件的数。(5 <= a < b <= 100,000,000);

Input

输入a和b(5 <= a < b <= 100,000)

Output

按从小到大输出a,b之间所有满足条件的素数回文数

Sample Input

5 500

Sample Output

5
7
11
101
131
151
181
191
313
353
373
383
#include <stdio.h>
#include <string.h>
#include <iostream>
#include <algorithm>
using namespace std;
const int N=100001;
int flag[N];
char c[N];
int a,b;
void Isprim()
{
    for(int i=0; i<=N; i++)
    {
        flag[i]=0;
    }
    for(int i=2;i<=N;i++)
    {
        if(flag[i]==0)
        {
            for( int j=2;i*j<=N;j++)
            {
                flag[i*j]=1;
            }
        }
    }
    return;
}
void xixi(int x)
{
    int n,o=0;
    while(x)
    {
        n=x%10;
        x=x/10;
        c[o++]=n+'0';//必须要加‘0’,否则存的就是ASCII码
    }//因为是回文数,就算是反过来也没关系
}
int main()
{
    while(scanf("%d%d",&a,&b)!=EOF)
    {
       Isprim();
        for(int i=a; i<=b; i++)
        {
            if(flag[i]==0)
            {
                xixi(i);
                int len=strlen(c);
                for(int j=0;j<=len/2;j++)
                {
                    if(c[j]!=c[len-j-1])
                        break;
                    if(j==len/2)
                        printf("%d
",i);
                }
            }
        }
    }
    return 0;
}
原文地址:https://www.cnblogs.com/tianmin123/p/4847298.html