문제 이해하기
골드바흐의 추측은 2보다 큰 모든 짝수는 두 개의 소수의 합으로 표현될 수 있다는 것이다. 나는 모든 짝수는 2로 나누어진다는 것을 이용해 2로 나눈 값에서 하나는 차례로 1을 빼면서, 다른 하나는 차례로 1을 더해가면서 두 수가 모두 소수가 될 때를 찾아내는 방식을 문제를 풀었다.
코드로 표현하기
#include <iostream>
using namespace std;
bool isit(int x) {
if (x < 2) return false;
for (int i = 2; i < x; i++) {
if (x % i == 0) return false;
}
return true;
}
int main() {
int t, n;
int a, b;
cin >> t;
for (int i = 0; i < t; i++) {
cin >> n;
a = n / 2;
b = n / 2;
while (1) {
if (isit(a) && isit(b)) {
cout << a << " " << b << endl;
break;
}
a -= 1;
b += 1;
}
}
}
더했을 때의 값이 짝수 n을 이루는 두 소수를 각각 a와 b라고 한다. 먼저 짝수 n을 2로 나누었을 때 값이 소수인지 확인하고 소수라면 그 값을 그대로 출력한다. 소수가 아니라면 a는 1씩 작게 하고, b는 1씩 크게 하면서 a와 b가 동시에 소수가 될 때를 찾아 그때의 값을 결과로 출력한다.
'알고리즘' 카테고리의 다른 글
[Python][DP] Q1912 연속합 (0) | 2025.06.10 |
---|---|
[Python][DP] 백준 Q1149: RGB 거리 (0) | 2025.06.07 |
[C++] 백준 11653번: 소인수분해 (0) | 2022.03.16 |
[C++] 백준 2581번: 소수 (0) | 2022.03.16 |
[C++] 백준 1978번: 소수 찾기 (0) | 2022.03.16 |