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

Как вы помните простое число — это такое число которое делится только на себя и на 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(). И выводим все числа меньшие сотни.

 

Похожий код:

Фото аватара
Алексей Петров

Программист, разработчик с 5 летним опытом работы. Учусь на разработчика игр на Unity и разработчика VR&AR реальности (виртуальной реальности). Основные языки программирования: C#, C++.

Оцените автора
Бла, бла код
Добавить комментарий

  1. Евгений

    Ваш код выдает не только простые числа, он выводит нечетные числа. Следует подправить первую функцию:

    def isprime(n):

    ….if n == 1:

    ……..return False

    ….for x in range(2, n):

    ……..if n % x == 0:

    …………return False

    ….return True

    Ответить
  2. Наталия

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

    Ответить
    1. lamazavr

      можно

      Ответить