首页 > 代码库 > 回文素数
回文素数
思路:
如果是九位数一个一个加会超时,那么就将各个位数分离开,控制对称位置相等,所以时间大大减少,然后采用递归
代码:
#include<iostream>
#include<cmath>
using namespace std;
int m=0,b[6000]={0};
void vp(int a[],int n,int t)
{
int i,q,s=0;
if(t!=n/2+(n%2))
for(i=0;i<=9;i++)
{a[n-t-1]=a[t]=i;
vp(a,n,t+1);
}
else
{for(i=n-1,q=1;i>=0;i--,q*=10)
s+=a[i]*q;
for(i=2;i<=sqrt(s);i++) //判断是否是素数
if(s%i==0)
break;
if(i>sqrt(s))
{b[m]=s;
m++;
}
}
}
int main()
{
int n,i,a[9]={0};
cin>>n;
if(n==1)
cout<<4<<endl<<2<<" "<<3<<" "<<5<<" "<<7<<endl;
else
{for(i=1;i<=9;i=i+2)
{a[n-1]=a[0]=i;
vp(a,n,1);
}
cout<<m<<endl;
if(m!=0) //如果不存在回文素数则不输出
{for(i=0;i<m-1;i++)
cout<<b[i]<<" ";
cout<<b[m-1]<<endl;
}
}
}
回文素数