Notice
Recent Posts
Recent Comments
Link
archive
[백준] 골드바흐의 추측 (Python) 본문
✏️ 문제
9020번: 골드바흐의 추측
1보다 큰 자연수 중에서 1과 자기 자신을 제외한 약수가 없는 자연수를 소수라고 한다. 예를 들어, 5는 1과 5를 제외한 약수가 없기 때문에 소수이다. 하지만, 6은 6 = 2 × 3 이기 때문에 소수가 아
www.acmicpc.net
✏️ 풀이
모든 짝수는 두 소수의 합으로 표현이 된다.
이 때 모든 짝수 n = n/2 + n/2로 표현이 가능하다.
따라서 이를 중심으로 왼쪽항은 1 빼주고 오른쪽 항은 1더해주면 모든 합의 경우의 수를 표현할 수 있다.
이 때 두 항이 소수인 것 중 가장 작은 것을 출력해준다.
이 풀이에서는 중앙에서 시작했으므로 소수인 첫번째 경우가 가장 차이가 적게 된다. 따라서 바로 break한다.
✏️ 코드
from math import sqrt
# 10000까지의 소수
sosu = []
for i in range(2, 10000):
for j in range(2, int(sqrt(i)) + 1):
if i % j == 0:
break
else:
sosu.append(i)
T = int(input())
for _ in range(T):
n = int(input()) # 두 소수의 합으로 나타내짐
# 무조건 짝수 차이남
diff = 0
while True:
a = int(n/2 - diff/2)
b = int(n/2 + diff/2)
if a in sosu and b in sosu:
print(a, b)
break
else:
diff += 2
'STUDY > 알고리즘' 카테고리의 다른 글
[백준] 수 정렬하기 3 (Python) (0) | 2021.03.08 |
---|---|
[백준] 터렛 (Python) (0) | 2021.03.08 |
[백준] 영화감독 숌 (Python) (0) | 2021.03.06 |
[백준] 소수 구하기 (Python) (0) | 2021.03.04 |
[백준] A+B - 4 (Python) (0) | 2021.03.01 |
Comments