2013-04-23 96 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