Python使用Set Comprehension生成素数

时间:2014-02-09 00:55:01

标签: python set-comprehension

我正在开始Python中的一个赋值,使用set comprehension调用少于100的素数列表。我可以使用

生成非素数
nonPrime = { x for x in range(2, 100) for y in range(2, x) if x % y == 0 }

这有效地返回所有非素数但我找不到除Excursive之外的其他方法或者使用一组从2到100的所有数字来获得一组素数。有没有一种方法可以在相同的集合理解中得到与此集相反的方法?

1 个答案:

答案 0 :(得分:5)

这不是最有效的算法,而是实现它:

prime = {x for x in range(2, 100) if all(x % y != 0 for y in range(2, x))}

或等同地:

prime = {x for x in range(2, 100) if not any(x % y == 0 for y in range(2, x))}

对于一个简单的改进,您可以在通过x的平方根后停止检查可能的因素:

prime = {x for x in range(2, 100) if all(x % y != 0 for y in range(2, int(math.floor(math.sqrt(x))) + 1))}