分析:先生成回文数,在判断是不是质数;生成回文数的方法很巧妙,在网上找的资料
#include<iostream>
#include<cstdio>
#include<math.h>
using namespace std;
int palind_prime[10000];
bool is_prime(int a)
{
for(int i=2;i<=(int)sqrt(a+0.5);i++)
{
if(a%i==0)
return false;
}
return true;
}
int main()
{
int c=1,temp;
for(int i=5;i<=9;i++)//一位数
{
temp=i;
if(is_prime(temp))
palind_prime[c++]=temp;
}
for(int i=1;i<=9;i++)//两位数
{
temp=11*i;
if(is_prime(temp))
palind_prime[c++]=temp;
}
for(int i=1;i<=9;i++)//三位数
{
for(int j=0;j<=9;j++)
{
temp=101*i+10*j;
if(is_prime(temp))
palind_prime[c++]=temp;
}
}
for(int i=1;i<=9;i++)//四位数
{
for(int j=0;j<=9;j++)
{
temp=1001*i+110*j;
if(is_prime(temp))
palind_prime[c++]=temp;
}
}
for(int i=1;i<=9;i++)//五位数
for(int j=0;j<=9;j++)
for(int k=0;k<=9;k++)
{
temp=10001*i+1010*j+100*k;
if(is_prime(temp))
palind_prime[c++]=temp;
}
for(int i=1;i<=9;i++)//六位数
for(int j=0;j<=9;j++)
for(int k=0;k<=9;k++)
{
temp=100001*i+10010*j+1100*k;
if(is_prime(temp))
palind_prime[c++]=temp;
}
for(int i=1;i<=9;i++)//七位数
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(is_prime(temp))
palind_prime[c++]=temp;
}
/*
printf("%d\n\n",c-1);
for(int i=1;i<c;i++)
{
printf("%d ",palind_prime[i]);
if(i%10==0)
printf("\n");
}*/
int a,b;
while(scanf("%d %d",&a,&b)!=EOF)
{
int left,right;
for(int i=1;i<c;i++)
if(palind_prime[i]>=a)
{
left=i;
break;
}
for(int i=c-1;i>=1;i--)
if(palind_prime[i]<=b)
{
right=i;
break;
}
for(int i=left;i<=right;i++)
printf("%d\n",palind_prime[i]);
printf("\n");
}
system("pause");
return 0;
}