백준 9020 풀이
Updated:
9020
골드바흐의 추측
문제의 최초 접근 : 2 ~ n까지의 소수 구하기 , 구한 소수 중 차이가 가장 작은 값 찾기
I P O
I : 프로그램 실행 횟수 , 골드바흐의 추축을 진행할 수 (프로그램 실행 횟수 만큼 줄바꿈 구분을 통해)
P : 2 ~ 입력받은 수 까지의 소수, 입력받은 수의 골드바흐 파티션 구하기
O : 입력받은 수 별로 골드바흐 파티션 (프로그램 실행 횟수 만큼 줄바꿈 구분을 통해)
source code
- 2 ~ n까지의 숫자를 리스트에 담고 제곱근을 활용해 소수 구분. 만약 2~제곱근 까지의 나눗셈을 진행시 나머지가 0인경우 리스트에서 삭제
if n[j] % 2 == 0:
handler = int(math.sqrt(n[j]))
for k in range (2,n[j]+1):
handler = int(math.sqrt(k))
for i in range (2 , handler + 1 ):
if k % i == 0:
num_list.remove(k)
break
print(num_list)
- 현재 골드바흐의 추측을 실행하는 수 - 소수의 값이 소수만 담아놓은 리스트에 있는지 확인 후 , 있으면 새로운 리스트에 추가 추가된 값들 중 차이가 가장 작은 값 출력(리스트의 가운데 있는 값)
for num in num_list: handler = n[j] - num #print("----\n" , n[j] , handler , num) if handler in num_list: a = [num , handler] result_list.append(a) print(result_list[(len(result_list)//2)][0],result_list[(len(result_list)//2)][1])
final source code
"""
골드바흐의 추측은 유명한 정수론의 미해결 문제로, 2보다 큰 모든 짝수는
두 소수의 합으로 나타낼 수 있다는 것이다. 이러한 수를 골드바흐 수라고 한다.
또, 짝수를 두 소수의 합으로 나타내는 표현을 그 수의 골드바흐 파티션이라고 한다.
예를 들면, 4 = 2 + 2, 6 = 3 + 3, 8 = 3 + 5, 10 = 5 + 5, 12 = 5 + 7,
14 = 3 + 11, 14 = 7 + 7이다. 10000보다 작거나 같은 모든 짝수 n에 대한
골드바흐 파티션은 존재한다.
2보다 큰 짝수 n이 주어졌을 때, n의 골드바흐 파티션을 출력하는 프로그램을
작성하시오. 만약 가능한 n의 골드바흐 파티션이 여러 가지인 경우에는 두 소수의
차이가 가장 작은 것을 출력한다.
"""
import math
n = []
T = eval(input())
for num in range (T):
n.append(eval(input()))
result_list = []
for j in range (T):
num_list = []
result_list = []
a = []
if n[j] >= 4 and n[j] <= 10000:
num_list = list(range(2,n[j] + 1))
if n[j] % 2 == 0:
handler = int(math.sqrt(n[j]))
for k in range (2,n[j]+1):
handler = int(math.sqrt(k))
for i in range (2 , handler + 1 ):
if k % i == 0:
num_list.remove(k)
break
#print(num_list)
for num in num_list:
handler = n[j] - num
#print("----\n" , n[j] , handler , num)
if handler in num_list:
a = [num , handler]
result_list.append(a)
print(result_list[(len(result_list)//2)][0],result_list[(len(result_list)//2)][1])
Leave a comment