预计阅读时间:5分钟
原题
描述
一个数如果从左往右读和从右往左读数字是相同的,则称这个数是回文数,如121,1221,15651都是回文数。给定位数n,找出所有既是回文数又是素数的n位十进制数。(注:不考虑超过整型数范围的情况)。
输入
位数n,其中1<=n<=9。
输出
第一行输出满足条件的素数个数。
第二行按照从小到大的顺序输出所有满足条件的素数,两个数之间用一个空格区分。
样例输入
1
样例输出
4
2 3 5 7
题目分析
没什么好分析的。
思路
水题大模拟。
参考代码
#include <iostream>
using namespace std;
typedef long long ll;
int n;
ll a,b,res[50000],cnt;
ll mypow(int x)
{
ll ans=1;
for(int i=1; i<=x; i++)
{
ans*=10;
}
return ans;
}
ll hw(ll x)
{
ll ans=x;
x/=10;
while(x>0)
{
ans=ans*10+x%10;
x/=10;
}
return ans;
}
bool isprime(ll x)
{
for(ll i=2; i*i<=x; i++)
{
if(x%i==0)
{
return false;
}
}
return true;
}
int main()
{
while(cin>>n){
if(n==1)
{
cout<<4<<endl<<2<<" "<<3<<" "<<5<<" "<<7<<endl;
}
else if(n==2)
{
cout<<1<<endl;
cout<<11<<endl;
}
else if(n%2==0)
{
cout<<0<<endl;
}
else
{
cnt=0;
n=(n+1)/2;
a=mypow(n-1);
b=mypow(n);
for(ll i=a; i<b; i++)
{
ll t=hw(i);
if(isprime(t))
{
res[cnt++]=t;
}
}
cout<<cnt<<endl;
for(int i=0; i<cnt; i++)
{
cout<<res[i]<<" ";
}
cout<<endl;
}
}
return 0;
}
希望本博客对大家有所帮助!