Подтвердить что ты не робот

Понимание Python

Итак, у меня есть две проблемы для домашнего задания, и я застрял на втором.

  • Используйте Python Set Comprehension (эквивалент Python нотации Set Builder), чтобы сгенерировать набор всех простых чисел, которые меньше 100. Напомним, что простое число является целым числом, которое больше 1, а не делится на любое целое, отличное от самого себя, и 1. Храните свой набор простых чисел в переменной (вам понадобится это для дополнительных частей). Выведите свой набор простых чисел (например, с функцией печати).

  • Используйте Python Set Comprehension для создания набора упорядоченных пар (кортежей длины 2), состоящих из всех простых пар, состоящих из простых чисел, меньших 100. Прайм-пара - это пара последовательных нечетных чисел, которые оба просто. Храните свой набор Prime Pairs в переменной. Ваш набор номер 1 будет очень полезен. Выведите свой набор прайм-пар.

Для первого, это отлично работает:

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

Тем не менее, я довольно сильно зациклен на втором. Я думаю, что мне, возможно, придется взять декартово произведение множества r с чем-то, но я просто не уверен.

Это меня немного приближает, но мне просто нужны последовательные пары.

cart = { (x, y) for x in r for y in r
     if x < y }
4b9b3361

Ответ 1

primes = {x for x in range(2, 101) if all(x%y for y in range(2, min(x, 11)))}

Я немного упростил тест - if all(x%y вместо if not any(not x%y

Я также ограничил диапазон y; нет смысла тестировать divisors > sqrt (x). Таким образом, max (x) == 100 означает max (y) == 10. Для x <= 10 y также должно быть < х.

pairs = {(x, x+2) for x in primes if x+2 in primes}

Вместо того, чтобы генерировать пары простых чисел и тестировать их, получить один и посмотреть, существует ли соответствующее высшее число.

Ответ 2

Вы можете получить чистые и понятные решения, построив соответствующие предикаты в качестве вспомогательных функций. Другими словами, используйте нотацию Python set-builder так же, как вы должны написать ответ с помощью регулярной математической системы.

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

С соответствующим предикатом в руке проблема 1 упрощает:

 low_primes = {x for x in range(1, 100) if is_prime(x)}

И проблема 2 упрощает:

 low_prime_pairs = {(x, x+2) for x in range(1,100,2) if is_prime(x) and is_prime(x+2)}

Обратите внимание, как этот код является прямым переводом спецификации проблемы, "Prime Pair - это пара последовательных нечетных чисел, которые являются как первыми".

P.S. Я пытаюсь дать вам правильную технику решения проблем, фактически не отдав ответ на домашнюю проблему.

Ответ 3

Вы можете генерировать пары следующим образом:

{(x, x + 2) for x in r if x + 2 in r}

Тогда все, что осталось сделать, это получить условие, чтобы сделать их первичными, что вы уже сделали в первом примере.

Другой способ сделать это: (хотя и медленнее для больших наборов простых чисел)

{(x, y) for x in r for y in r if x + 2 == y}