직대딩 블로그

BOJ 6588번 골드바흐의 추측 본문

알고리즘/백준 온라인 저지

BOJ 6588번 골드바흐의 추측

Jae Yeon 2023. 2. 12. 23:16

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

 

6588번: 골드바흐의 추측

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

www.acmicpc.net

 

두 홀수 소수의 합으로 n을 나타낼 수 없는 경우에는 "Goldbach's conjecture is wrong." 을 출력하라고 문제에 나와있는데 그럴 필요없다. 왜냐면 문제에서 주어진 n의 범위는 6 ≤ n ≤ 1000000 이고, 골드바흐의 추측은 이미 10의 18제곱 까지 증명되었기 때문이다.

그러므로 그냥 에라토네스의 체를 이용하여 ~n 까지의 소수의 개수를 미리 배열에 저장해두고

n = a+b 일 때 ,

n - a = b

a + b = n

이므로 n에서 저장해둔 소수를 뺀 값이 소수일 경우 출력해주면 된다.

 

#include<stdio.h>
int a[1000005] = { 1,1 }, n;
int main() 
{
	for (int i = 2; i < 1e6; i++) if (!a[i]) 
    {
			for (int j = i * 2; j < 1e6; j += i)
				a[j] = 1;
	}
	while (1) 
    {
		scanf("%d", &n);
		if (n == 0) return 0;
		bool res = false;
		for (int i = 1;; i++) if (!a[i] && !a[n - i]) 
        {
			printf("%d = %d + %d\n", n, i, n - i);
			res = true;
			break;
		}
		if (!res) printf("Goldbach's conjecture is wrong.\n");
	}
}

'알고리즘 > 백준 온라인 저지' 카테고리의 다른 글

BOJ 10845번 큐  (0) 2023.02.17
BOJ 17427번 약수의 합 2  (0) 2023.02.16
BOJ 10159번 저울  (0) 2023.02.16
BOJ 20366번 같이 눈사람 만들래?  (0) 2023.02.13
BOJ 2531번 회전 초밥  (0) 2023.02.12
Comments