首页 > 代码库 > 回文素数

回文素数

技术分享

思路:

如果是九位数一个一个加会超时,那么就将各个位数分离开,控制对称位置相等,所以时间大大减少,然后采用递归

代码:

#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;

          }
    }

}

技术分享

回文素数