2014-02-09 57 views
0

我正在開始Python中的任務,使用set comprehension調用小於100的素數列表。我可以用Python使用Set Comprehension生成素數

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

這有效地返回所有非素數生成非素數,但我找不到比移動性之外的方式還是這一套從2到100的集合中的所有數字來得到一組素數數字。有沒有一種方法可以在相同的集合理解中得到相反的結果?

+0

什麼是「o」和「Y」設置爲?或者那是爲了'x%y == 0'? –

回答

4

這是不是最有效的算法,但要實現它:

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))}