[백준] 17103: 골드바흐 에디션 - 파이썬[python]

다인·2024년 10월 1일

백준

목록 보기
70/112
post-thumbnail

소수의 합을 저장해야 하나 에반데.. 생각하다가 못 참고 구글링을 해봤는데 소수의 합이니까 입력받은 값에서 소수를 빼면 소수가 나올 때 카운팅을 해주더라. 이 쉬운 걸 왜 생각을 못 했지..! 다음부턴 내 힘으로 푸리라,,🙂‍↕️

코드

import sys

prime = [0]*2 + [1]*(1000000)
for i in range(2, 1000000): # 소수가 아닌 걸 거르기
    if prime[i]:
        for j in range(2*i, 1000000, i):
            prime[j] = 0

T = int(sys.stdin.readline())
for _ in range(T):
    N = int(sys.stdin.readline())
    cnt = 0
    for i in range(2, N//2+1):
        if prime[i] == 1 and prime[N-i] == 1:
                cnt += 1
    print(cnt)
  • 속도를 가장 빠르게 하기 위해 1000000개의 수 모두에 대한 소수 여부를 저장하는 리스트를 사용했다. 가장 빨랐던 소수가 아닌 걸 거르는 방법을 이용했다.(비교는 전의 글 참고하기!)
  • 대칭인 걸 거르기 위해 N을 반띵하고, 2부터(1은 소수가 아니니까) 반띵한 수까지 리스트를 접근해서 i와 N-i가 모두 소수인지 판단한 후 카운팅 해준다.

결과

이게 최선의 방법이 맞나,,,..?

0개의 댓글