#include <stdio.h>
#include <stdlib.h>
#include<math.h>
int main()
{
int a,b,k,i,c;
while(~scanf("%d%d",&a,&b))
{
for(k=a; k<=b&&k<=9989899; k++)
{
c=k;
int sum=0,flag=0,f=1;
while(c>0)
{
sum=sum*10+c%10;
c=c/10;
}
if(sum==k)
flag=1;
if(flag)
{
for(i=2; i<=sqrt(k); i++)
{
if(k%i==0)
{
f=0;
break;
}
}
}
if(f&&flag)
printf("%d\n",k);
}
printf("\n");
}
return 0;
}
容易超时的几处:
1. 需要用电脑跑出所给范围内最大的素数回文,并作为限制条件
for(k=a; k<=b&&k<=9989899; k++)
2.因为它需要既是素数又是回文,所以如果它不是回文,也就没有必要去判断是不是素数了
3.判断是否为素数的循环(改进版)
for(i=2; i<=sqrt(k); i++)
难点:
如何判断回文
while(c>0)
{
sum=sum*10+c%10;
c=c/10;
}
//训练反思:
//比赛时做题(6月24日)不明白如何判断素数回文,现在(8月12号)依然不记得
//而且需要注意的超时/的点只记得(<=9989899),其它方面忘记了。
//下一步改进:
//1.做题自己绞尽脑汁想的才印象深刻,所以以后要自己多思考。
//2.做过的感觉比较经典的题目要经常拿出来复习并总结。
11-18
10-13
05-17
01-25
“相关推荐”对你有帮助么?
-
非常没帮助
-
没帮助
-
一般
-
有帮助
-
非常有帮助
提交