所以我想找出第10001个素数#。这是我的密码-
counter = 3
primes = [1]
while len(primes) < 10002:
for i in range(2, counter):
if counter % i == 0:
counter += 1
else:
primes.append(counter)
counter += 1
print counter作为素数的输出,我得到的是一个数列,前几个数是1,3,5,7,11.到目前为止,还不错..。13,17,19,23,27等等,27?因此,在这一点上,它崩溃,并开始返回,主要是素数,但不是所有素数。这需要永远的时间。
我刚开始编程,通过CodeAcademy的Python课程,现在我试着找出如何克服语法入门的问题。我不是来自数学背景,所以我知道质数是什么,我知道有更好的方法来解决这个问题。如果在类似的船上有谁想“合作”,一起学习Py2.7,我非常乐意。
发布于 2014-01-24 00:03:01
我不会为您实现任何东西,因为这就是您要执行Project的原因,但我将向您指出The Sieve of Eratosthenes的方向。它将在几秒钟内计算出您的代码将在几小时内完成的操作。
它的工作原理是:(伪码)
for known_prime in a huge list of numbers:
k=2
while known_prime*k < the biggest number:
known_prime*k is not prime
k += 1一旦通过了列表中的sqrt,就可以找到列表中的每个素数。
发布于 2014-01-24 00:23:33
因为您正在做Euler项目,所以您显然需要对代码进行注释,而不是解决方案。
你的代码:
counter = 3
primes = [1]
while len(primes) < 10002:
for i in range(2, counter):
if counter % i == 0:
counter += 1
else: # Mis-aligned else (assuming it's intended for the if)
primes.append(counter)
counter += 1
print counterelse与if错误地对齐。for循环一直到counter,并且测试自身的可分性必然会找到余数0。else子句对于counter的每个非因素都会命中.大多数数字都不是一个因素,所以你不想在这种情况下采取行动。相反,当if部件触发时,就会中断循环。counter添加到素数列表中。看起来你正在尝试实现一个天真的,未经优化的蛮力搜索,这很好。
在对算法进行编码之前,可以尝试用文字或伪代码写出算法。
发布于 2014-01-24 00:27:20
作为一项练习,我将为您编写一段简单的代码,而不是一步一步地编写一段复杂的代码,并给出类似问题的解决方案。
作为理解python的一个练习,尝试在这一行中找出发生了什么。这段代码将找到素数,直到n个数,而不是你想要的第一个n个素数。
def primes(n):
return sorted(set(range(2, n+1)) - set([p*i for p in range(2, n+1) for i in range(p, n+1)]))https://stackoverflow.com/questions/21321779
复制相似问题