洛谷 P1217 [USACO1.5] 回文质数 Prime Palindromes

在洛谷选筛法的题,选到这题,然后上来二话不说一顿埃筛,提交,re??
《至死都没看提示一眼》
但是在题解中发现一个华点,也是我能不生成回文过这题的关键,把遍历a~b的for循环每次+=2,因为偶数一定非质,然后就ac了。

AcCode:

#include<iostream>
#include<bitset>
#include<cmath>
using namespace std;
const int bitmax = 1e8 + 5;
bitset<bitmax> prime; //0为质数,1为合数,省得我再去初始化。

void E_prime(int n){
    prime[0] = prime[1] = 1;
    int c = sqrt(n); //预处理
    for(int i = 2; i <= c; i++){
        if(!prime[i]){
            for(int j = i * i; j <= n; j += i) prime[j] = 1;
        }
    }
}

bool hw(int x){
    int a = x;
    int ra = 0;
    while(a){
        ra = ra * 10 + a % 10;
        a /= 10;
    }
    return x == ra;
}

int main(){
    int a, b;
    cin >> a >> b;
    E_prime(b);
    if(a % 2 == 0) a++;
    for(int i = a; i <= b; i+=2){
        if(hw(i)) {
            if(!prime[i]) cout << i << endl;
        }
    }
	
	return 0;
} 
posted @ 2025-05-29 23:31  Yuhhhhh  阅读(10)  评论(0)    收藏  举报