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

先按照题目提示把回文数搞出来,然后挨个判断素数即可。

#include<iostream>
#include<set>

using namespace std;

set<int> s;
int a[10];
int m, n;

int check(int t){
    for(int i = 2; i <= t / i; i ++)
        if(t % i == 0) return 0;
    return 1;
}

void dfs(int n, int u, int k){
    if(u == n){
        int ans = 0;
        for(int i = 0; i < u - k; i ++) ans = ans * 10 + a[i];
        if(k) ans = ans * 10 + a[u - 1];
        for(int i = u - 1 - k; i >= 0; i --) ans = ans * 10 + a[i];
        s.insert(ans);
        return;
    }
    
    for(int i = (u ? 0 : 1); i < 10; i ++){
        a[u] = i;
        dfs(n, u + 1, k);
    }
}

int main(){
    
    for(int i = 1; i <= 8; i ++){
        if(i & 1) dfs(i / 2 + 1, 0, 1);
        else dfs(i / 2, 0, 0);
    }
    
    cin >> m >> n;
    
    for(auto t : s)
        if(t >= m && t <= n && check(t)) cout << t << endl; 
    
    return 0;
}
原文地址:https://www.cnblogs.com/tomori/p/13777205.html