通过回文数的性质来生成,比如说四位数的回文素数,在生成时,考虑到第一位与最后一位相同,第二位与第三位相同,可以通过两个变量来标记,比如说4114=1001*4+110*1
#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
int hwprime[10000];
int num;
bool prime(int a)
{
for(int i=2;i<=sqrt(a*1.0);i++)
{
if(a%i==0)
return false;
}
return true;
}
void huiwen()
{
int temp;
num=1;
for(int i=5; i<=9; i++) //1位数
{
temp=i;
if(prime(temp))
hwprime[num++]=temp;
}
for(int i=1; i<=9; i++) //2位数
{
temp=11*i;
if(prime(temp))
hwprime[num++]=temp;
}
for(int i=1; i<=9; i++) //3位数
{
for(int j=0; j<=9; j++)
{
temp=101*i+10*j;
if(prime(temp))
hwprime[num++]=temp;
}
}
for(int i=1; i<=9; i++) //4位数
{
for(int j=0; j<=9; j++)
{
temp=1001*i+110*j;
if(prime(temp))
hwprime[num++]=temp;
}
}
for(int i=1; i<=9; i++) //5位数
{
for(int j=0; j<=9; j++)
{
for(int k=0; k<=9; k++)
{
temp=10001*i+1010*j+100*k;
if(prime(temp))
hwprime[num++]=temp;
}
}
}
for(int i=1; i<=9; i++) //6位数
{
for(int j=0; j<=9; j++)
{
for(int k=0; k<=9; k++)
{
temp=100001*i+10010*j+1100*k;
if(prime(temp))
hwprime[num++]=temp;
}
}
}
for(int i=1; i<=9; i++) //7位数
{
for(int j=0; j<=9; j++)
{
for(int k=0; k<=9; k++)
{
for(int t=0; t<=9; t++)
{
temp=1000001*i+100010*j+10100*k+1000*t;
if(prime(temp))
hwprime[num++]=temp;
}
}
}
}
for(int i=1; i<=9; i++) //8位数
{
for(int j=0; j<=9; j++)
{
for(int k=0; k<=9; k++)
{
for(int t=0; t<=9; t++)
{
temp=10000001*i+1000010*j+100100*k+11000*k;
if(prime(temp))
hwprime[num++]=temp;
}
}
}
}
for(int i=1;i<num;i++)
{
printf("%d ",hwprime[i]);
if(i%10==0)
printf("\n");
}
}
int main()
{
huiwen();
return 0;
}
其它位的相似 ,类推