洛谷 - P1217 - 回文质数 - 枚举
https://www.luogu.org/problemnew/show/P1217
考虑暴力生成所有的回文数然后再判断是不是质数。注意个位的选择实际上只有4种。所以是 $4*10^3*10^3=4*10^6$ ,完全充裕的复杂度。
#include<bits/stdc++.h> using namespace std; #define ll long long int a,b; vector<int> ans; bool isp(int n){ int c=sqrt(n+1e-4); for(int i=2;i<=c;i++){ if(n%i==0) return false; } return true; } void gen1(){ if(a<=2&&2<=b) ans.push_back(2); if(a<=3&&3<=b) ans.push_back(3); if(a<=5&&5<=b) ans.push_back(5); if(a<=7&&7<=b) ans.push_back(7); } void gen2(){ for(int d=1;d<=9;d++){ if(d!=5){ int p=11*d; if(a<=p&&p<=b) if(isp(p)) ans.push_back(p); } } } void gen3(){ for(int d=1;d<=9;d++){ if(d!=5){ for(int d2=0;d2<=9;d2++){ int p=101*d+10*d2; if(a<=p&&p<=b) if(isp(p)) ans.push_back(p); } } } } void gen4(){ for(int d=1;d<=9;d++){ if(d!=5){ for(int d2=0;d2<=9;d2++){ int p=1001*d+110*d2; if(a<=p&&p<=b) if(isp(p)) ans.push_back(p); } } } } void gen5(){ for(int d=1;d<=9;d++){ if(d!=5){ for(int d2=0;d2<=9;d2++){ for(int d3=0;d3<=9;d3++){ int p=10001*d+1010*d2+100*d3; if(a<=p&&p<=b) if(isp(p)) ans.push_back(p); } } } } } void gen6(){ for(int d=1;d<=9;d++){ if(d!=5){ for(int d2=0;d2<=9;d2++){ for(int d3=0;d3<=9;d3++){ int p=100001*d+10010*d2+1100*d3; if(a<=p&&p<=b) if(isp(p)) ans.push_back(p); } } } } } void gen7(){ for(int d=1;d<=9;d++){ if(d!=5){ for(int d2=0;d2<=9;d2++){ for(int d3=0;d3<=9;d3++){ for(int d4=0;d4<=9;d4++){ int p=1000001*d+100010*d2+10100*d3+1000*d4; if(a<=p&&p<=b) if(isp(p)) ans.push_back(p); } } } } } } void gen8(){ for(int d=1;d<=9;d++){ if(d!=5){ for(int d2=0;d2<=9;d2++){ for(int d3=0;d3<=9;d3++){ for(int d4=0;d4<=9;d4++){ int p=10000001*d+1000010*d2+100100*d3+11000*d4; if(a<=p&&p<=b) if(isp(p)) ans.push_back(p); } } } } } } void solve(){ gen1(); gen2(); gen3(); gen4(); gen5(); gen6(); gen7(); gen8(); } int main(){ scanf("%d%d",&a,&b); solve(); sort(ans.begin(),ans.end()); for(auto i:ans) printf("%d\n",i); }