직대딩 블로그
BOJ 6588번 골드바흐의 추측 본문
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