https://www.acmicpc.net/problem/11502
11502번: 세 개의 소수 문제
문제 정수론(수학)에서, 세 개의 소수 문제(3-primes problem) 는 다음과 같은 추측을 말한다. '5보다 큰 임의의 홀수는 정확히 세 개의 소수들의 합으로 나타낼 수 있다. 물론 하나의 소수를 여러 번 더할 수도 있다.' 예를 들면, 7 = 2 + 2 + 3 11 = 2 + 2 + 7 25 = 7 + 7 + 11 5보다 큰 임의의 홀수를 입력받아서, 그 홀수가 어떻게 세 소수의 합으로 표현될 수 있는지 (또는 불가능한지) 알아보는 프로그램을
www.acmicpc.net
주어진 5 이상의 홀수 K를 세 개의 소수의 합으로 나타낼 수 있는지 판별하는 문제였습니다.
먼저 이 문제를 풀기 위해서는 소수를 구하는 에라토스테네스의 체 알고리즘을 알고 있어야 합니다.
모르신다면 여기의 문제를 먼저 풀어보시기 바랍니다.
에라토스테네스의 체 알고리즘을 사용하여 주어진 K보다 작은 소수들을 구한 후
3중 for문으로 모든 경우를 탐색해보는 브루트 포스(Brute Force) 알고리즘 기법을 사용하여
K를 만들 수 있는 세 개의 소수를 찾아냈습니다.
<풀이>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
def printSum(pL, s):
for n1 in pL:
for n2 in pL:
for n3 in pL:
if n1 + n2 + n3 == s:
print(n1, n2, n3)
return
print(0)
def findPrime(num):
data = list(range(2, num + 1))
result = []
while len(data) != 0:
m = data[0]
result.append(m)
cnt = 0
while cnt < len(data):
if data[cnt] % m == 0:
data.pop(cnt)
cnt -= 1
cnt += 1
return result
T = int(input())
N = []
for i in range(T):
N.append(int(input()))
for n in N:
printSum(findPrime(n), n)
|
cs |
함수 findPrime: num까지 숫자 중 소수 리스트를 반환한다.
함수 printSum: 소수 리스트 PL과 소수의 합으로 만들 s를 받아 s를 만들 세개의 소수를 출력한다.
'난 이 분야 전문가야! > Algorithm' 카테고리의 다른 글
[백준][C] 17070 파이프 옮기기 1 - 풀이 공유 (0) | 2020.05.04 |
---|---|
[백준][Python] 2294 동전2 - 풀이 공유 (0) | 2020.04.30 |
[백준][Python] 1915 가장 큰 정사각형 - 풀이 공유 (0) | 2020.04.30 |
[백준][C] 2994 내한 공연 - 풀이 공유 (1) | 2020.04.28 |
[백준][Python] 2960 에라토스테네스의 체 - 풀이 공유 (0) | 2020.04.19 |