【发布时间】:2021-12-28 04:02:27
【问题描述】:
我需要一些帮助来解释下面的埃拉托色尼筛。我从其他一些 Stackoverflow 页面复制了它,但我没有逐行理解它。有人可以解释一下吗?
def eratosthenes(n):
multiples = []
for i in range(2, n):
if i not in multiples:
print (i)
for j in range(i*i, n, i): #Troubled Part
multiples.append(j)
eratosthenes(100)
我特别没有得到 range(i*i...) 部分。为什么一组括号中有三个属性?另外,为什么我是平方的?谢谢!
【问题讨论】:
-
范围可以有多个参数。使用 range(a,b,c),您正在执行 range(a,b) 但按 c 计数
-
这可能是我见过的 Eratosthenes 实现中最糟糕的筛子。可能不是学习的好例子。
-
我记得有一篇长文章争论说,如果埃拉托色尼筛的实现比二次复杂度还差,那么它就不应该被称为埃拉托色尼筛。