배열 번호가 있다고 가정합니다. 주어진 배열의 모든 소수 요소의 합도 소수인지 확인해야 합니다.
따라서 입력이 nums =[1,2,4,5,3,3]과 같으면 모든 소수의 합이 (2+5+3+3) =13이고 13도 이므로 출력은 True가 됩니다. 프라임.
이 문제를 해결하기 위해 다음 단계를 따릅니다. −
- 최대 :=10000
- sieve :=MAX 크기 목록 및 true로 채우기
- create_list_of_primes() 함수 정의
- sieve[0] :=거짓, sieve[1] :=거짓
- 2에서 MAX - 1 사이의 i에 대해 다음을 수행합니다.
- sieve[i]가 참이면
- 2^i~MAX 범위의 j에 대해 i
- 만큼 증가
- 체[j] :=거짓
- 2^i~MAX 범위의 j에 대해 i
- sieve[i]가 참이면
- 기본 방법에서 다음을 수행합니다.
- generate_list_of_primes()
- 총계:=0
- 0 ~ arr - 1 크기 범위의 i에 대해
- sieve[arr[i]]가 참이면
- 총계 :=총계 + arr[i]
- sieve[arr[i]]가 참이면
- sieve[전체]가 참이면
- 참 반환
- 거짓을 반환
이해를 돕기 위해 다음 구현을 살펴보겠습니다. −
예시 코드
MAX = 10000 sieve = [True] * MAX def generate_list_of_primes() : sieve[0] = False sieve[1] = False for i in range(2, MAX) : if sieve[i] : for j in range(2**i, MAX, i) : sieve[j] = False def solve(arr) : generate_list_of_primes() total = 0 for i in range(len(arr)) : if sieve[arr[i]] : total += arr[i] if sieve[total] : return True return False nums = [1,2,4,5,3,3] print(solve(nums))
입력
[1,2,4,5,3,3]
출력
True