我正在做一个在开始 Python 时使用集合理解来调用小于 100 的素数列表的作业。我可以使用生成非素数
nonPrime = { x for x in range(2, 100) for y in range(2, x) if x % y == 0 }
这有效地返回了所有非素数,但我找不到除 Excursive 之外的方法,或者用一组从 2 到 100 的所有数字来获得一组素数。有没有办法让我在同一个集合理解中得到这个集合的反义词?
我正在做一个在开始 Python 时使用集合理解来调用小于 100 的素数列表的作业。我可以使用生成非素数
nonPrime = { x for x in range(2, 100) for y in range(2, x) if x % y == 0 }
这有效地返回了所有非素数,但我找不到除 Excursive 之外的方法,或者用一组从 2 到 100 的所有数字来获得一组素数。有没有办法让我在同一个集合理解中得到这个集合的反义词?
这不是最有效的算法,但要实现它:
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))}