in ra và đếm các vừa là số nguyên tố vừa là số đối xứng trong 1 đoạn ab (kiểm tra số nguyên tố bằng sàng eratosthenes) code c++ ạ

1 câu trả lời

#include <iostream>
#include <cstring>
#include <sstream>
using namespace std;

int a,b;
bool prime[100001];

void sieve(int n) {
    memset(prime, true, sizeof(prime));
    prime[0] = prime[1] = false;
    for(int i = 2; i * i <= n; ++i)
        if(prime[i])
            for(int j = i * i; j <= n; j += i)
                prime[j] = false;
}

string toString(int num) {
    stringstream ss;
    ss << num;
    string str;
    ss >> str;
    return str;
}

bool dx(int n) {
    string s = toString(n);
    for(int i = 0; i < s.size() / 2; ++i)
        if(s[i] != s[s.size() - i - 1])
            return false;
    return true;
}

int main() {
    cin >> a >> b;
    
    sieve(b);
    
    for(int i = a; i <= b; ++i)
        if(prime[i] && dx(i))
            cout << i << ' ';
}