使用列表推导查找素数

新手上路,请多包涵

我试图生成 x 到 y 范围内的所有素数。我首先尝试了简单的示例: range(10,11) 这意味着检查 10 是否是素数:

这是我的代码:

 prime_list = [x for x in range(10, 11) for y in range(2,x) if x % x == 0 and x % 1 == 0 and x % y != 0]

我知道这个东西缺少告诉表达式 x%y != 0 应该检查 range (2,x) 中的所有 y 的选项,当且仅当所有满足此条件时才返回 true。

我们该怎么做?

原文由 JavaSa 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 488
2 个回答

使用 all 检查所有元素(从 2 到 x-1)满足条件:

 >>> [x for x in range(2, 20)
     if all(x % y != 0 for y in range(2, x))]
[2, 3, 5, 7, 11, 13, 17, 19]

原文由 falsetru 发布,翻译遵循 CC BY-SA 3.0 许可协议

您可以使用平方根的概念进行更多优化,以免遍历整个列表并通过以下方式更快地计算质数!

 import math
[x for x in range(2, 21) if  all(x % y != 0 for y in range(2, int(math.sqrt(x + 1)) ) )]

原文由 Cibas Mec 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题