洛谷 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;
}