总时间限制:
5000ms
内存限制:
65536kB
描述
一个数如果从左往右读和从右往左读数字是相同的,则称这个数是回文数,如121,1221,15651都是回文数。给定位数n,找出所有既是回文数又是素数的n位十进制数。(注:不考虑超过整型数范围的情况)。
输入
位数n,其中1<=n<=9。
输出
第一行输出满足条件的素数个数。
第二行按照从小到大的顺序输出所有满足条件的素数,两个数之间用一个空格区分。
样例输入
1
样例输出
4 2 3 5 7
代码:
#include<bits/stdc++.h> using namespace std; int n,a[20],c[10005][20],ans,cnt; bool p(int x){ if(x<2) return false; for(int i=2;i<=sqrt(x);i++){ if(x%i==0) return false; } return true; } void s(int x){ if(x==(n+1)/2){ for(int i=0;i<n/2;i++){ a[n-i-1]=a[i]; } int sum=0; for(int i=0;i<n;i++){ sum=sum*10+a[i]; } cnt=max(cnt,sum); if(p(sum)){ for(int i=0;i<n;i++) c[ans][i]=a[i]; ans++; } return; } for(int i=0;i<=9;i++){ a[x]=i; s(x+1); } } int main(){ cin>>n; s(0); cout<<ans<<endl; for(int i=0;i<ans;i++){ for(int j=0;j<n;j++){ cout<<c[i][j]; } cout<<' '; } cout<<endl; return 0; }