首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何更快地运行这些Python代码?[ Euler问题#7]

如何更快地运行这些Python代码?[ Euler问题#7]
EN

Stack Overflow用户
提问于 2011-07-22 11:58:16
回答 13查看 7.4K关注 0票数 3

我正在尝试完成这个Euler项目的挑战:

通过列出前六个素数: 2,3,5,7,11和13,我们可以看到第6素数是13。 10001素数是多少?

我的代码似乎是正确的,因为它适用于小数,例如,第6素数是13。

我如何改进它,以便代码将更快地运行更大的数字,如10001。

代码如下:

代码语言:javascript
复制
#Checks if a number is a prime
def is_prime(n):
    count = 0
    for i in range(2, n):
        if n%i == 0:
            return False
            break
        else:
            count += 1
    if count == n-2:
        return True

#Finds the value for the given nth term     
def term(n):
    x = 0
    count = 0
    while count != n:
        x += 1
        if is_prime(x) == True:
            count += 1
    print x


term(10001)

更新:

谢谢你的答复。我应该更加清楚,我并不是想加快解释器的速度,也不是寻找更快的解释器,因为我知道我的代码不是很好,所以我在寻找提高代码效率的方法。

EN

回答 13

Stack Overflow用户

回答已采纳

发布于 2011-07-22 12:05:17

几个值得思考的问题:

  • 你真的需要在n-1之前检查部门吗?你多久能停下来?
  • 除了2,你真的需要用2的倍数来检查除法吗?
  • 3? 5的倍数呢?有没有办法将这一想法推广到以前测试过的素数的所有倍数?
票数 11
EN

Stack Overflow用户

发布于 2011-07-22 12:08:36

Project的目的并不是真正地考虑学习编程,而是考虑算法。对于问题#10,您的算法需要比#7甚至更快,等等。所以您需要想出一种更好的方法来找到素数,而不是运行Python代码的更快的方法。人们在一定的时间范围内解决这些问题,用的计算机要慢得多,你现在使用的计算机是通过考虑数学来解决的。

在这一点上,如果你真的需要帮助思考这个问题,也许可以问一下你在https://math.stackexchange.com/上的素数算法。

票数 10
EN

Stack Overflow用户

发布于 2011-07-22 12:07:18

一个更快的翻译不会切断它。即使是用C或汇编语言编写的实现也不够快(在项目Euler的“大约一秒”时间框架内)。坦率地说,你的算法是可悲的。一些研究和思考将帮助您编写一种算法,该算法在狗--慢速解释器中运行得比用本地代码实现的当前算法运行得更快(我不会给出任何具体细节,部分原因是因为这是您的工作,部分原因是我无法即时知道需要进行多少优化)。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6789649

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档