我用Python编写的erathostenes算法在几个星期前,它看上去像下面这样:Erathostenes筛优化
def erathostenes(n):
A = range(2,n+1)
B = []
i = 0
while A[i] < math.sqrt(n):
B.append(A[i])
j = i
aux = A[i]
while j < len(A):
if A[j]%aux == 0:
A[j] = 0
j += aux
i += 1
while A[i] == 0:
i += 1
for i in range(len(A)):
if A[i] != 0:
B.append(A[i])
i += 1
return B
想一点(我在编程小白)之后,我只是做了一些在我的算法的修改的右现在看起来像:
def erathostenes(n):
A = range(2,n + 1)
B = []
i = 0
raiz = math.sqrt(n)
lenA = len(A)
rangeLenA = range(lenA)
while A[i] < raiz:
B.append(A[i])
j = i
aux = A[i]
while j < lenA:
A[j] = 0
j += aux
i += 1
while A[i] == 0:
i += 1
for i in rangeLenA:
if A[i] != 0:
B.append(A[i])
i += 1
return B
如果我在n = 10.000.000在所述第一代码的执行时间执行的算法是大约7秒,并与所述第二代码是约4秒。
有关我的算法中更多优化的任何想法?谢谢!
这是非常好的前期代码审查。 –
还有其他算法,例如http://en.wikipedia.org/wiki/Sieve_of_Atkin – NPE