Liệt kê dãy số vừa là số nguyên tố vừa là số Palidrom

23
Lập trình C++

Bài toán. Số Palidrom là số đối xứng, nghĩa là đọc từ trái sang phải hay từ phải sang trái ta đều được 1 số. Ví dụ: 11, 121, 1331, …. Nhập 2 số nguyên dương m, n. Liệt kê dãy số vừa là số nguyên tố vừa là số Palidrom trong đoạn [m, n]. Ví dụ: 

PALIDROM.INP

PALIDROM.OUT

100 200

101 131 151 181 191

Code tham khảo:

#include <iostream>
#include <cmath>
using namespace std;
int palidrom(int n) {
    int x = n;
    int d = 0;
    while (n > 0) {
        d = d*10 + n%10;
        n /= 10;
    }
    if (x == d) return 1;
    else return 0;
}
int nguyenTo(int n) {
    if (n < 2) return 0;
    for (int i = 2; i <= sqrt(n); i++) {
        if (n % i == 0) return 0;
    }
    return 1;
}
int main () {
    freopen("PALIDROM.INP","r",stdin);
    freopen("PALIDROM.OUT","w",stdout);
    long m, n;
    cin >> m >> n;
    for (int i = m; i < n; i++) {
        if (palidrom(i) && nguyenTo(i))
            cout << i << " ";
    }
    return 0;
}