新手村-过程函数与递归-P1217 [USACO1.5]回文质数 Prime Palindromes

题目描述
因为151既是一个质数又是一个回文数(从左到右和从右到左是看一样的),所以 151 是回文质数。

写一个程序来找出范围[a,b](5 <= a < b <= 100,000,000)( 一亿)间的所有回文质数;

输入输出格式
输入格式:

1 行: 二个整数 a 和 b .

输出格式:

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

输入输出样例
输入样例#1:

5 500

输出样例#1:

5
7
11
101
131
151
181
191
313
353
373
383
————————————————
思路:筛选质数 判断回文数

#include <bits/stdc++.h>
using namespace std;

bool book[100000001];
void prime(int b) { //用埃氏筛法生成质数表
    
    memset(book, true, sizeof(book));//初始化,默认全部都是质数
    book[1]=false;//1 不是素数
    int n=sqrt(b);
    for (int i=2;i<=n;i++) {
        if (book[i]) {//质数的倍数不是质数,把所有质数的倍数全部设为false,如2的倍数4,3的倍数9 
            
            for (int j=2;j<=b/i;j++)
                book[i*j]=false;  
        }
    }
}


bool hws(int num) {//回文数判断

    int tmp=num,ans=0;
    while (tmp!=0) {
        ans=ans*10+tmp%10;
        tmp/=10;
    }
    if (ans==num)
        return true;
    else
        return false;
}

int main() {
    int a,b;
    cin>>a>>b;
    if (b>=10000000)
        b=9999999;

    prime(b);

    if(a>b)
        return 0;

    if (a%2==0) a++;
    for (int i=a;i<=b;i+=2) {
        if (book[i] && hws(i))
            cout<<i<<endl;
    }
    return 0;
}
发布了108 篇原创文章 · 获赞 2 · 访问量 2041

猜你喜欢

转载自blog.csdn.net/zqhf123/article/details/104455180