※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※
이번에 볼 문제는 백준 17103번 문제인 골드바흐 파티션이다.
문제는 아래 링크를 확인하자.
https://www.acmicpc.net/problem/17103
17103번: 골드바흐 파티션
첫째 줄에 테스트 케이스의 개수 T (1 ≤ T ≤ 100)가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있고, 정수 N은 짝수이고, 2 < N ≤ 1,000,000을 만족한다.
www.acmicpc.net
100만을 넘는 소수는 주어지는 짝수의 합을 구성하는 소수로 쓰일 수 없으므로, 100만 이하의 모든 수에 대해 각 수가 소수인지 아닌지를 알 수 있는 에라토스테네스의 체를 구하자.
테스트케이스가 최대 100개로 적으므로, 각 테스트할 수
2를 제외한 소수는 모두 홀수이므로 4를 제외한 모든 짝수의 합을 구성하는 두 소수는 홀수임을 이용해 아래의 제출 코드와 같은 약간의 최적화를 할 수 있다.
아래는 제출한 소스코드이다.
#include <iostream>
#include <vector>
using namespace std;
typedef long long ll;
int sieve[1000001];
int T;
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
sieve[1] = 1;
for (int i = 2; i < 1000; i++) {
if (sieve[i]) continue;
for (int j = i * i; j < 1000000; j += i) sieve[j] = 1;
}
cin >> T;
while (T--) {
int ans = 0;
int x; cin >> x;
for (int i = 3; i * 2 <= x; i += 2) {
if (sieve[i] || sieve[x - i]) continue;
ans++;
}
if (x == 4) ans = 1;
cout << ans << '\n';
}
}
728x90
'BOJ' 카테고리의 다른 글
[BOJ 10194 // C++] Aligned Calender (0) | 2023.12.08 |
---|---|
[BOJ 28214 // C++] 크림빵 (0) | 2023.12.07 |
[BOJ 28073 // C++] PSAT 특별과정 (1) | 2023.12.05 |
[BOJ 28072 // C++] K512에서 피자 먹기 (0) | 2023.12.04 |
[BOJ 28071 // C++] 승형이의 사탕 사기 (2) | 2023.12.03 |