2013-04-23 3 views
1

У меня есть небольшой вопрос об этой простой функции проверки python. Это действительно глупо, но что делает [2] в for n in [2]?Python Primes Array Confusion

Я понимаю формулу для проверки на простые числа, без проблем, но не могу понять, что такое [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] - список –

+0

Я думаю, это потому, что для инструкции 'for in' требуется список для итерации. Существует сумма из двух списков [2] и та, которая дает функцию «range». –

ответ

1

Это просто список того:

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

то есть они хотят, чтобы проверить делимость на 2, но, очевидно, не нужно проверять делимость на 4, 6, 8 ... так что с этой операцией «добавление» a 2 в начало списка нечетных чисел.

К сожалению, эта функция не работает - она ​​возвращает prime(2) == False и prime(1) == True, которые оба неправильно.

+0

Привет. Благодарю. Я заметил, что о ложных результатах для 2 и 1 и более интересует проблема с добавлением списка. –

+0

И почему в аду 9 проверено? –

+0

По той же причине 25, 49, 121 (т.е. квадраты квадратов). Этот алгоритм использует 'range (3, int (ceil (input ** 0.5)), 2)', который является неправильным, вы должны проверить 'range (3, int (1 + input ** 0.5), 2)' вместо этого. – wim