回文质数

#include <bits/stdc++.h>
using namespace std;
vector<int> li;
int bas[11];
int wei(int x) {
    int cnt = 0;
    while (x != 0) {
        cnt++;
        x = x / 10;
    }
    return cnt;
}
void huiwen(int x, int len) {
    if (len < 0 || len > 8)
        return;
    if (wei(x) == len)
        li.push_back(x);
    int res = x * 10;
    for (int i = 0; i <= 9; i++) {
        huiwen(res + i + i * bas[len + 1], len + 2);
    }
}
bool isprime(int x) {
    for (int i = 2; i <= x / i; i++) {
        if (x % i == 0)
            return 0;
    }
    return 1;
}
int main() {
    bas[0] = 1;
    for (int i = 1; i <= 9; i++)
        bas[i] = bas[i - 1] * 10;
    huiwen(0, 0);
    for (int i = 0; i <= 9; i++)
        huiwen(i, 1);
    sort(li.begin(), li.end());
    int a, b;
    scanf("%d%d", &a, &b);
    for (int x : li) {
        if (x < a)
            continue;
        if (x > b)
            break;
        if (isprime(x))
            printf("%d\n", x);
    }
}

点赞

发表回复