Python 使用Eratosthenes筛找出2到n之间的所有素数

Python 使用Eratosthenes筛找出2到n之间的所有素数,python,primes,sieve-of-eratosthenes,Python,Primes,Sieve Of Eratosthenes,我有一个字的问题,我正试图解决,但在一个关键的部分卡住了 将以下英文描述转换为Python代码。 将n初始化为100。将数字初始化为从2到n的数字列表,但不包括n。当结果以空列表开始时,只要数字包含任何数字,就重复以下操作 将数字中的第一个数字添加到结果的末尾 删除数字中所有可被刚刚添加到结果中的数字整除(被整除时没有余数)的数字 结果是多久 当n为100时,结果的长度为25 到目前为止,我已经了解了如何设置n=100,以及范围(2100),results=[],结果将是一个附加情况,如

我有一个字的问题,我正试图解决,但在一个关键的部分卡住了

将以下英文描述转换为Python代码。

n初始化为100。将数字初始化为从2n的数字列表,但不包括n。当结果以空列表开始时,只要数字包含任何数字,就重复以下操作

  • 数字中的第一个数字添加到结果的末尾

  • 删除数字中所有可被刚刚添加到结果中的数字整除(被整除时没有余数)的数字

结果是多久

n为100时,结果的长度为25

到目前为止,我已经了解了如何设置
n=100
,以及
范围(2100)
results=[]
,结果将是一个附加情况,如
results.append(numbers[])
,但我的大脑中有一个障碍,无法确定“删除可被添加到结果中的数字整除的数字中的每个数字”

======几分钟后=======

正如Michael0x2a所说——当我必须实现一个算法,使用埃拉托斯烯的筛子来查找从2到n的所有素数时,这就是一个问题。

我想我可以继续处理这个问题

非常感谢各位的回答。

以下内容:

将数字中的第一个数字添加到结果的末尾

…不同于:

results.append(numbers[])
要访问列表中的第一个编号,可以使用第一个索引

因此:


此外,要执行以下操作:

但我在思考“删除每一个”的关键时遇到了心理障碍 可被添加到的数字整除的数字中的数字 结果”

…您需要某种方法来测试一个数字可以被什么整除,这意味着您需要使用模:

some_number % some_other_number

如果没有余数,模将得到零。

如果有帮助,问题似乎是要求您实现一个算法,使用埃拉托斯烯筛查找从2到n的所有素数。问题是什么?您是在问如何遍历数字列表,还是如何找出一个数可以被另一个数整除一个数字?为什么这是一个“单词”问题?请重新打开。我已经对我的问题进行了编辑,并清楚地解释了我需要的内容。亲爱的Kyle,你能为你的解决方案编写一个完整的实现吗?我只是想弄清楚它到底是如何工作的。谢谢。谢谢你的帮助Kyle。我已经用你的帮助完成了:
codedef long_实现(n) :numbers=range(2,n)results=[]而len(numbers)>0:results.append(numbers[0])用于数字中的数字:如果数字%results[-1]==0:#numbers.remove(number)
@Matvey在
结果之后。append(numbers[0])
结果[-1]
只是
==numbers[0]
;另外,
对于数字中的数字:如果数字%结果[-1]==0:numbers。删除(数字)
是试除法;但是对于范围中的数字(数字[0],100,数字[0]):如果数字中的数字:numbers。删除(数字),这就是埃拉托什尼的筛子。
n = 100
numbers = range(2,100)
results = []
while len(numbers) > 0:
    results.append(numbers[0])
    numbers = [number for number in numbers if number % results[-1] != 0]
print len(results)
n = 100
numbers = range(2,100)
results = []
while len(numbers) > 0:
    results.append(numbers[0])
    numbers = [number for number in numbers if number % results[-1] != 0]
print len(results)