그래서 저는 숙제에이 두 가지 문제가 있고 두 번째 문제에 갇혀 있습니다.
-
Python Set Comprehension (Python의 Set Builder 표기법에 해당)을 사용하여 100보다 작은 모든 소수 집합을 생성합니다. 소수는 1보다 크고 다음 이외의 다른 정수로 나눌 수없는 정수입니다. 그 자체와 1. 소수 집합을 변수에 저장합니다 (추가 부분에 필요합니다). 소수 집합을 출력합니다 (예 : 인쇄 기능 사용).
-
Python Set Comprehension을 사용하여 100 미만의 소수로 구성된 모든 소수 쌍으로 구성된 정렬 된 쌍 세트 (길이 2의 튜플)를 생성합니다. 소수 쌍은 모두 소수 인 연속 된 홀수 쌍입니다. 소수 쌍 세트를 변수에 저장하십시오. 당신의 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 }
답변
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의 범위를 제한했습니다. 제수> sqrt (x)에 대한 테스트에는 의미가 없습니다. 따라서 max (x) == 100은 max (y) == 10을 의미합니다. x <= 10의 경우 y도 <x 여야합니다.
pairs = {(x, x+2) for x in primes if x+2 in primes}
소수 쌍을 생성하고 테스트하는 대신 하나를 얻고 해당하는 더 높은 소수가 있는지 확인하십시오.
답변
헬퍼 함수로 적절한 술어를 빌드하여 깨끗하고 명확한 솔루션을 얻을 수 있습니다. 즉, 일반 수학 집합 표기법으로 답을 작성하는 것과 같은 방식으로 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)}
이 코드가 문제 사양을 직접 번역 한 것임을 주목하십시오. “A Prime Pair는 둘 다 소수 인 연속 된 홀수 쌍입니다.”
PS 저는 숙제 문제에 대한 답을 실제로주지 않고 올바른 문제 해결 기술을 제공하려고합니다.
답변
다음과 같이 쌍을 생성 할 수 있습니다.
{(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}