使用Eratosthenes的Sieve查找从2到n的所有素数

时间:2013-11-23 21:29:16

标签: python primes sieve-of-eratosthenes

我有一个问题,我试图解决,但我被困在一个关键部分。

  

将以下英文说明转换为Python代码。

     

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

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

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

  •   
     

结果有多长?

     

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

到目前为止,我已理解设置n = 100range(2, 100)results = [],结果将是results.append(numbers[])中的附加情况,但我有一个心理障碍,找出“删除数字中可以被添加到结果中的数字整除的数字”的关键字。

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

正如Michael0x2a所说 - 当我必须使用Eratosthenes的Sieve实现一个从2到n找到所有素数的算法时,这是一个问题。

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

非常感谢您的回答。

2 个答案:

答案 0 :(得分:3)

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)

答案 1 :(得分:2)

以下内容:

  

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

......与以下内容不同:

results.append(numbers[])

要访问列表中的第一个号码,您可以使用第一个索引。

因此:

numbers[0] ## would be the first "number" in numbers

此外,要做到以下几点:

  

但是我有一个心理障碍,想出“删除所有人”的关键   数字中的数字,可以被添加到的数字整除   结果。”

...你需要一些方法来测试一个数字可被整除的东西,这意味着你需要使用模数:

some_number % some_other_number

如果没有余数,模数将导致零。