如何能让“回文质数”不超时?剪枝算法?回文质数问题答案及注释。

文章探讨了如何优化回文质数的程序,通过引入剪枝算法减少运算量。首先,从原始思路出发,指出判断回文数和质数的独立函数会导致超时。接着,提出了在for循环内先判断质数再判断回文数的改进,但这对于大规模数据仍不够。最后,详细介绍了剪枝算法的应用,包括微观和宏观层面的优化,例如筛选偶数和5的倍数,改进回文和质数判断方式,以及针对偶数位数的回文数的特殊处理。通过这些优化,程序避免了超时问题。
摘要由CSDN通过智能技术生成

优化“回文质数“程序的思维过程”

最原始的思路:
分别设计判断回文数和质数的函数,再在主函数中调用。

int prime(int m);
int huiwenshu(iny m);
int main()
{
     int a,b,i;
     scanf("%d%d",&a,&b);
     for(i=a;i<=b;i++)
     {
          if(prime(i)==1&&huiwenshu(i)==1)
              printf("%d",i);
     }
}

这样显然对于所取范围内的每一个数,都要进行两次运算,才能得出答案。太过繁琐,严重超时。

然后我就想到了下一种思路:
在for循环里用if语句,先判断质数,如果是质数再进行回文数的判断。
这样所取范围内的每一个数,合数只进行一次运算,质数进行两次。能减少一定运算量,但对于1到100,000,000这样大的范围来说还是微不足道的。

后来我就在想怎么能从1到100,000,000这个集合中直接去掉一些明显不符合要求的数?比如除2以外偶数,比如除5以外5的倍数?如果能把这些数都抛掉,运算一下能减少一半以上。
这个时候,我发现了“剪枝算法”,于是

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值