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))}