我正在尝试完成这个Euler项目的挑战:
通过列出前六个素数: 2,3,5,7,11和13,我们可以看到第6素数是13。 10001素数是多少?
我的代码似乎是正确的,因为它适用于小数,例如,第6素数是13。
我如何改进它,以便代码将更快地运行更大的数字,如10001。
代码如下:
#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)更新:
谢谢你的答复。我应该更加清楚,我并不是想加快解释器的速度,也不是寻找更快的解释器,因为我知道我的代码不是很好,所以我在寻找提高代码效率的方法。
发布于 2011-07-22 12:05:17
几个值得思考的问题:
发布于 2011-07-22 12:08:36
Project的目的并不是真正地考虑学习编程,而是考虑算法。对于问题#10,您的算法需要比#7甚至更快,等等。所以您需要想出一种更好的方法来找到素数,而不是运行Python代码的更快的方法。人们在一定的时间范围内解决这些问题,用的计算机要慢得多,你现在使用的计算机是通过考虑数学来解决的。
在这一点上,如果你真的需要帮助思考这个问题,也许可以问一下你在https://math.stackexchange.com/上的素数算法。
发布于 2011-07-22 12:07:18
一个更快的翻译不会切断它。即使是用C或汇编语言编写的实现也不够快(在项目Euler的“大约一秒”时间框架内)。坦率地说,你的算法是可悲的。一些研究和思考将帮助您编写一种算法,该算法在狗--慢速解释器中运行得比用本地代码实现的当前算法运行得更快(我不会给出任何具体细节,部分原因是因为这是您的工作,部分原因是我无法即时知道需要进行多少优化)。
https://stackoverflow.com/questions/6789649
复制相似问题