Ищем простые числа в python - функции генераторы, yeld

Опубликовано lamazavr - чт, 11/22/2012 - 14:10
Body

Как вы помните простое число - это такое число которое делится только на себя и на 1.
Никаких супер мега методик тут не будет. Я просто постараюсь на примере объяснить значение команды yield.

С начала напишем функцию, которая будет проверять простое это число или нет:

def isprime(n):
    if n == 1:
        return False
    for x in range(2, n):
        if n % x == 0:
            return False
        else:
            return True

Думаю тут затруднений быть не должно.. Функция просто проверяет в цикле все числа от 2 до проверяемого и если хотя-бы 1 делится без остатка возвращает лож.
Следующей будет самая "интересная" функция этой статьи:

def primes(n = 1):
    while(True):
        if isprime(n): yield n
        n += 1

Эта функция генерирует простые числа. Мы в бесконечном цикле (не бойтесь это не повлияет на ресурсы, на самом деле в бесконечность интерпретатор не залезет) проверяем каждое число от 1 и если оно простое заносим его в результат при помощи yield. Эта команда по сути является чем-то вроде функции добавления значений в результат. Тут это неплохо показано на примере.
Ну и теперь используем єто всё:

for n in primes():
    if n > 100: break
    print(n)

Для каждого элемента (который мы назвали n) из числа который генерируется в primes(). И выводим все числа меньшие сотни.

Комментарии

Ваш код выдает не только простые числа, он выводит нечетные числа. Следует подправить первую функцию:
def isprime(n):
....if n == 1:
........return False
....for x in range(2, n):
........if n % x == 0:
............return False
....return True

Если я введу двойку то ответ будет Not prime (хотя это Prime). Почему нельзя прописать что если n == 2 то это Prime?

Классный пример, спасибо.

Добавить комментарий

Этот вопрос задается для того, чтобы выяснить, являетесь ли Вы человеком или представляете из себя автоматическую спам-рассылку.