素数回文

题目链接

#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.做过的感觉比较经典的题目要经常拿出来复习并总结。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值