2013-04-23 116 views
1

我對這個python素數檢查函數有個小問題。這真的很愚蠢,但for n in [2]中的[2]是做什麼的?Python Primes數組混亂

我理解檢查素數的公式,沒有問題,但無法弄清楚[2]的用途。

來自:http://en.wikibooks.org/wiki/Python_and_Math

from math import ceil 
def prime(input): 
    for n in [2] + range(3, int(ceil(input**0.5)), 2): 
     if input%n == 0: 
      return False 
    return True 

謝謝回答我愚蠢的問題。

+0

它是一個列表的簡單連接,其中[2]是一個列表 – 2013-04-23 15:17:45

+0

我認爲是因爲'for in'指令需要一個列表來迭代。有兩個列表[2]和一個產生'範圍'函數的總和。 – 2013-04-23 15:17:54

回答

1

這是一個簡單列表添加:

>>> range(3, 10, 2) 
[3, 5, 7, 9] 
>>> [2] + range(3, 10, 2) 
[2, 3, 5, 7, 9] 

即他們希望通過2檢查整除,但顯然沒有必要通過4,6,8,檢查可分性......所以這個操作是在奇數列表的開頭添加「2」。

順便說一句,這個功能被破壞 - 它返回prime(2) == Falseprime(1) == True這都是錯誤的。

+0

嗨。謝謝。我確實注意到關於2和1的錯誤結果,並且更關心列表添加問題。 – 2013-04-23 15:32:33

+0

爲什麼在地獄被檢查9? – 2013-05-15 06:52:27

+0

出於同樣的原因25,49,121是(即質數平方)。這個算法使用'range(3,int(ceil(input ** 0.5)),2)'這是不正確的,你應該檢查'range(3,int(1 + input ** 0.5),2)'。 – wim 2013-05-15 07:08:22