栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

下一个更高的总理和回文数

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

下一个更高的总理和回文数

您可以进行很多优化:

  • 就像注释中建议的user2357 ..一样,请先测试回文率,然后检查数字是否为素数,因为素数检查更加昂贵。
  • 一旦您检查数字是否可被2整除,就无需检查偶数可除性。因此,您可以将其更改
    [2] + range(3, int(n**0.5) + 1, 2)
    为仅检查2之后的奇数。(此外,您需要像我在评论中提到的那样执行sqrt + 1 )
  • 您应该使用
    ()
    而不是
    []
    []
    首先生成完整的因子列表,然后才检查
    any
    。如果使用
    ()
    ,它将创建一个生成器,因此一旦
    True
    找到一个值,它将立即停止而不计算整个列表。
  • 出于相同原因
    xrange
    ,您还应该使用而不是
    range
    xrange
    给出一个生成器,
    range
    给出一个列表)
  • 您可以使用Eratosthenes筛分算法来显着减少质数检查所需的时间。
  • 您还可以查看回文检查是否可以更快进行。实际上,您可以跳过很多数字,而不是
    + 1
    每次都跳过。

这是具有大多数优化功能的版本,最后两个除外:

def next_higher(n):    if n % 2 == 0:        n = n - 1    while True:        n = n + 2        s = str(n)        if s == s[::-1]: if not any((n % i == 0 for i in xrange(3, int(n**0.5) + 1, 2))):     return n

This should be pretty fast for your needs I believe. But you can do the last 2
optimizations to make it much more faster if you want.



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/485592.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号