这道题很多人只有我第一时间想到了枚举
然后又放弃了
因为要超时嘛,这很显然,数据已经到了100000000。
但是不用怕,服务器没时间,我们时间多!
服务器不干的事,我们自己干!!
枚举走起!!
由于只有奇数位回文数中的奇数才有可能是质数,故只枚举1,3,5,7位的回文数(注意特殊值 11 )
#include<cstdio>
#include<iostream>
using namespace std;
int main()
{
for(int d1 = 1; d1 <= 9; d1 ++)
{
int q,lin=0;
q = d1;
for(int i=1;i<=q-1;i++)
{
if(q%i==0)lin++;
if(i==q-1&&lin==1)printf("%d,",q);
}
}
for (int d1 = 1; d1 <= 9; d1+=2)
{
for (int d2 = 0; d2 <= 9; d2++)
{
int q,lin=0;
q = 100*d1 + 10*d2 + d1;
for(int i=2;i<=q-1;i++)
{
if(q%i==0)lin++;
if(i==q-1&&lin==0)printf("%d,",q);
}
}
}
for (int d1 = 1; d1 <= 9; d1+=2)
{
for (int d2 = 0; d2 <= 9; d2++)
{
for (int d3 = 0; d3 <= 9; d3++)
{
int q,lin=0;
q = 10000*d1 + 1000*d2 +100*d3 + 10*d2 + d1;
for(int i=2;i<=q-1;i++)
{
if(q%i==0)lin++;
if(i==q-1&&lin==0)printf("%d,",q);
}
}
}
}
for (int d1 = 1; d1 <= 9; d1+=2)
{
for (int d2 = 0; d2 <= 9; d2++)
{
for (int d3 = 0; d3 <= 9; d3++)
{
for (int d4 = 0; d4 <= 9; d4++)
{
int q,lin=0;
q=1000000*d1+100000*d2+10000*d3+1000*d4+100*d3+10*d2+d1;
for(int i=2;i<=q-1;i++)
{
if(q%i==0)lin++;
if(i==q-1&&lin==0)printf("%d,",q);
}
}
}
}
}
return 0;
}
将结果复制到数组里,然后就OK了!!
最后再判定一遍,AC
#include<cstdio>
#include<iostream>
using namespace std;
int ans[1000]={自己填呗~~};
int main()
{
int a,b;
scanf("%d %d",&a,&b);
for(int i=0;i<=1000;i++)
{
if(a<=ans[i]&&ans[i]<=b)printf("%d\n",ans[i]);
}
return 0;
}
我好菜啊
附上巨佬们的博客链接以求得怜悯
原文:https://www.cnblogs.com/SeiyuYuri/p/11430870.html