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

 

6588번: 골드바흐의 추측

각 테스트 케이스에 대해서, n = a + b 형태로 출력한다. 이때, a와 b는 홀수 소수이다. 숫자와 연산자는 공백 하나로 구분되어져 있다. 만약, n을 만들 수 있는 방법이 여러 가지라면, b-a가 가장 큰

www.acmicpc.net

 

문제

골드바흐의 추측 : 4보다 큰 모든 짝수는 두 홀수 소수의 합으로 나타낼 수 있다.

 

백만 이하의 짝수를 받으면, 해당 짝수를 두 홀수 소수의 합으로 표현하는 문제입니다.

아직 해결되지 않았다 했으므로, 나타낼 수 없는 경우를 작성하지 않았습니다.

 

풀이

에라토스테네스의 체를 통해, 백만 이하의 소수를 구합니다.

그리고, 2를 제외한 소수는 모두 홀수이므로 3부터 시작해서 더해서 원하는 짝수가 나오는 홀수 두 개를 찾습니다.

 

LIMIT = 1000001
prime_list = [True] * (LIMIT)

for i in range(2,1001):
    if prime_list[i]:
        for j in range(2*i,LIMIT, i):
            prime_list[j] = False


while True:
    x = int(input())
    if(x==0): break

    for i in range(3,LIMIT):
        if prime_list[i] and prime_list[x-i]:
            print(x, '=', i, '+' , x-i)
            break

 

에라토스테네스의 체

: 해당 수보다 작은 모든 수로 나누어 보아서 소수인지 확인하는 방법입니다.

 

1. 1은 제거

2. 지워지지 않은 수 중 제일 작은 2를 채택하고, 나머지 2의 배수를 지웁니다.

3. 지워지지 않은 수 중 제일 작은 3을 채택하고, 나머지 3의 배수를 모두 지웁니다.

4. 지워지지 않은 수 중 제일 작은 5를 채택하고, 나머지 5의 배수를 모두 지웁니다.

 

다음과 같은 과정을 반복합니다.

 

에라토스테네스의 체

n=1000
a = [False,False] + [True]*(n-1)
primes=[]

for i in range(2,n+1):
  if a[i]:
    primes.append(i)
    for j in range(2*i, n+1, i):
        a[j] = False
print(primes)

https://wikidocs.net/21638

 

2. 소수 구하기 - 에라토스테네스의 체

# 소수 : 1과 그 수 자신 이외의 자연수로는 나눌 수 없는 자연수이다. # 코딩 소수인지 검사하는 함수(isPrime)를 만든다. 1부터 100 사이의 소수를 구하는 ...

wikidocs.net

 

'알고리즘 공부 > 수학' 카테고리의 다른 글

[백준/수학] 4375번: 1  (0) 2022.10.02
[백준/수학] 1094번: 막대기  (1) 2022.10.02
[백준/수학] 11689번: GCD(n,k)=1  (0) 2022.09.18
[백준/기하학] 11758번 CCW  (0) 2022.08.21
[백준/수학] 3360번 깡총깡총  (0) 2022.03.18

+ Recent posts