Python, генерирующий простые числа с использованием Set Compreatsion

Я работаю над заданием в начале Python, вызывая список простых чисел менее 100, используя заданное понимание. Я могу генерировать не простые числа, используя

nonPrime = { x for x in range(2, 100) for y in range(2, x) if x % y == 0 }

Это эффективно возвращает все не простые числа, но я не могу найти способ, кроме как Экскурсивный Или этот набор с набором всех чисел от 2 до 100, чтобы получить набор простых чисел. Есть ли способ, которым я могу получить противоположность этого набора в том же понимании набора?

1 ответ

Решение

Это не самый эффективный алгоритм, но для его реализации:

prime = {x for x in range(2, 100) if all(x % y != 0 for y in range(2, x))}

Или, что эквивалентно:

prime = {x for x in range(2, 100) if not any(x % y == 0 for y in range(2, x))}

Для одного простого уточнения вы можете прекратить проверку возможных факторов, как только вы пройдете квадратный корень из x:

prime = {x for x in range(2, 100) if all(x % y != 0 for y in range(2, int(math.floor(math.sqrt(x))) + 1))}
Другие вопросы по тегам