정답 코드를 바로 보기보다는 아래 글을 먼저 읽고 푸시길 바랍니다.
https://pushback.tistory.com/8
소수 문제 해결의 기본
소수 문제에서 사용가능한 기법은 세가지 정도이다. 첫번째로 naive하게 2부터 n - 1까지 모든 수로 나누어버리는 방법이다. // naive하게 소수판별 bool isPrime = true; int num = 101; for(int i = 2; i <..
pushback.tistory.com
입력으로 들어오는
하지만 테스트 케이스의 수가 존재하고 문제에서 언급은 안되어 있지만 대략
TLE의 위험이 도사리고 있으니 안전하게 에라토스테네스의 체를 사용하자. 그냥 소수 문제에선 에라토스테네스의 체가 거의 정답이다.
에라토스테네스의 체를 사용하여
어떤 입력
결국,
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int INF = 2147483647;
const int MAX_N = 1e4 + 1;
const int MOD = 1e+9;
ll gcd(ll a, ll b) { for (; b; a %= b, swap(a, b)); return a; }
bool isPrime[MAX_N];
int main() {
ios::ios_base::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
memset(isPrime, 1, sizeof(isPrime));
isPrime[1] = false;
for (int i = 2; i < MAX_N; ++i) {
if (isPrime[i]) {
for (ll j = i * 1LL * i; j < (ll) MAX_N; j += i * 1LL) {
isPrime[j] = false;
}
}
}
int T;
cin >> T;
while (T--) {
int n;
cin >> n;
int left = 2, right;
for (int x = 2; x <= (n / 2); x++) {
if (isPrime[x] && isPrime[n - x]) {
left = x;
right = n - x;
}
}
cout << left << ' ' << right << '\n';
}
return 0;
}
'BOJ_단계별로 풀어보기(9단계~) > [8단계] 기본 수학2' 카테고리의 다른 글
[백준 3009] 네번째 점 (0) | 2021.07.28 |
---|---|
[백준 1085] 직사각형에서 탈출 (0) | 2021.07.28 |
[백준 4948] 베르트랑 공준 (0) | 2021.07.25 |
[백준 1929] 소수 구하기 (0) | 2021.07.25 |
[백준 11653] 소인수분해 (0) | 2021.07.25 |