我这个方法应该和《深入浅出程序设计竞赛》(基础篇)的方法应该是一样,就是不知道为什么不能过!
#include<bits/stdc++.h>
using namespace std;
bool prime(int x)
{
if(x==1 or x%2==0)return false;
else
{
int k=sqrt(x);
for(int i=2;i<=k;++i)
if(x%i==0)return false;
return true;
}
}
int main()
{
vector<int>prim;
//一位数
prim.push_back(2);
prim.push_back(3);
prim.push_back(5);
prim.push_back(7);
//二位数
prim.push_back(11);
//三位数
for(int i=1;i<=9;i+=2)
{
if(i==5)break;
for(int j=0;j<=9;++j)
{
int f=i*100+j*10+i;
prim.push_back(f);
}
}
//四位数
for(int i=1;i<=9;i+=2)
{
if(i==5)continue;
for(int j=0;j<=9;++j)
{
int f=1000*i+100*j+10*j+i;
prim.push_back(f);
}
}
//五位数
for(int i=1;i<=9;i+=2)
{
if(i==5)continue;
for(int j=0;j<=9;++j)
{
for(int k=0;k<=9;++k)
{
int f=i*10000+1000*j+100*k+10*j+i;
prim.push_back(f);
}
}
}
//六位数
for(int i=1;i<=9;i+=2)
{
if(i==5)continue;
for(int j=0;j<=9;++j)
{
for(int k=0;k<=9;++k)
{
int f=i*100000+j*10000+k*1000+k*100+j*10+i;
prim.push_back(f);
}
}
}
//七位数
for(int i=1;i<=9;i+=2)
{
if(i==5)continue;
for(int j=0;j<=9;++j)
{
for(int k=0;k<=9;++k)
{
for(int x=0;x<=9;++x)
{
int f=i*1000000+j*100000+k*10000+x*1000+k*100+j*10+i;
prim.push_back(f);
}
}
}
}
//八位数
for(int i=1;i<=9;i+=2)
{
if(i==5)continue;
for(int j=0;j<=9;++j)
{
for(int k=0;k<=9;++k)
{
for(int x=0;x<=9;++x)
{
int f=10000000*i+1000000*j+100000*k+10000*x+1000*x+100*k+10*j+i;
prim.push_back(f);
}
}
}
}
int ii;int n,m;cin>>n>>m;
for(ii=0;;++ii)
if(prim[ii]>=n)break;
for(;prim[ii]<=m;++ii)
cout<<prim[ii]<<endl;
}