几周前我在 python 中编写了 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 秒。
关于我的算法中更多优化的任何想法?谢谢!