https://www.acmicpc.net/problem/9020
#Solution
다음과 같은 알고리즘으로 효율적으로 구하였다.
1) 10000 이하의 모든 소수 생성
2) 두 소수의 값을 더했을 때 짝수이며, 10000 이하인 모든 소수를 goldbach 리스트 안에 넣어줌
3) 리스트 안의 숫자 페어 중 곱이 가장 큰 수 = 가장 인접한 수를 출력
# 재료가 될 소수 생성
prime_ox = [True for _ in range(10001)]
for i in range(2, int((10001) ** 0.5)):
if prime_ox[i] == True:
for j in range(i+i, 10001, i):
prime_ox[j] = False
prime_list = [i for i, j in enumerate(prime_ox) if j == True and i >=2 ]
#구한 소수를 더하여 골드바흐 리스트 안에 넣어주기 (여러개 가능)
goldbach = [[] for _ in range(10001)]
for i in range(len(prime_list)):
for j in range(i, len(prime_list)):
even_num = prime_list[i] + prime_list[j]
if even_num % 2 == 0 and even_num <= 10000:
goldbach[even_num].append([prime_list[i], prime_list[j]])
case = int(input())
for _ in range(case):
num = int(input())
answer = [0, 0]
# 곱이 가장 큰 수: 가장 근접한 수
for [i, j] in goldbach[num]:
if i * j > answer[0] * answer[1]:
answer[0] = i
answer[1] = j
print("%s %s" % (answer[0], answer[1]))
'Programming [Python] > 백준 알고리즘 솔루션' 카테고리의 다른 글
#153 백준 파이썬 [2960] 에라토스테네스의 체 (0) | 2019.10.25 |
---|---|
#152 백준 파이썬 [1929] 소수 구하기 (0) | 2019.10.25 |
#150 백준 파이썬 [4948] 베르트랑 공준 (0) | 2019.10.25 |
#149 백준 파이썬 [5430] AC - 덱 (0) | 2019.10.24 |
#148 백준 파이썬 [11866] 조세퍼스 문제 0 (0) | 2019.10.24 |