Algorithm/백준

[백준/Python] 골드바흐의 추측

poppy 2021. 10. 3. 11:57
반응형

https://www.acmicpc.net/problem/9020

 

9020번: 골드바흐의 추측

1보다 큰 자연수 중에서  1과 자기 자신을 제외한 약수가 없는 자연수를 소수라고 한다. 예를 들어, 5는 1과 5를 제외한 약수가 없기 때문에 소수이다. 하지만, 6은 6 = 2 × 3 이기 때문에 소수가 아

www.acmicpc.net

n = int(input())
prime = [0, 0] + [1] * 9999 # 소수 리스트

# 에라토스테네스의 체를 이용하여 소수 구하기
for i in range(2, int(10000 ** 0.5)+1):
	if prime[i]:
		for j in range(i*2, 10001, i):
			prime[j] = 0

# 두 소수의 차이가 가장 작은 골드바흐 파티션 구하기
for _ in range(n):
	num = int(input())
	idx = 0
	while True:
		if prime[num // 2 - idx] and prime[num // 2 + idx]:
			print(num // 2 - idx, num // 2 + idx)
			break
		idx += 1

1. 에라토스테네스의 체를 이용하여 소수를 구한다.

    1-1. 매번 소수를 구하는 것보다 입력받는 숫자가 10000까지로 특정 되어 있으므로 미리 소수를 구하는 것이 효율적이다.

2.  골드바흐 파티션을 구한다.

    2-1. 두 소수의 차이가 가장 작아야 하므로 입력받은 숫자의 가운데부터 탐색한다.

    2-2. 두 소수의 합이 num인 것을 찾지 못하면 idx에 +1 을 한다.

    2-3. 두 소수의 합이 num인 것을 찾으면 결과를 출력하고 반복문을 빠져나온다.

 

반응형

'Algorithm > 백준' 카테고리의 다른 글

[백준/Python] 숨바꼭질 6  (0) 2021.10.05
[백준/Python] 01타일  (0) 2021.10.03
[백준/Python] 신나는 함수 실행  (0) 2021.10.02
[백준/Python] 베르트랑 공준  (0) 2021.10.01
[백준/Python] 피보나치 함수  (0) 2021.09.30