티스토리 뷰
https://www.acmicpc.net/problem/9020
무작정 1부터 늘려가며 비교를 했는데 시간초과 오류가 떴다.
그래서 다시 생각해보니 중간값에서 멀어지는 것이 두 소수의 차이가 가장 작은 값을 찾는 더 빠른 방법일거라 생각했다.
소수를 구하는 방법은
https://www.acmicpc.net/problem/1929
를 풀어보자!
#include <iostream>
#include <math.h>
using namespace std;
bool *primenumber;
//에라토스테네스의 체를 활용한 소수 구하기
void prime(int n)
{
primenumber = new bool[n+1];
fill_n(primenumber, n+1, 1);
primenumber[0] = false; //0은 소수가 아님
primenumber[1] = false; //1은 소수가 아님
for(int i=2; i<=sqrt(n); i++)
{
if(primenumber[i] == true)
for(int j=2*i; j<=n; j+=i)
primenumber[j] = false;
}
}
//골드바흐의 추측
void goldbach(int n)
{
//짝수의 중간값에서 1씩 멀어지며 탐색하기
for(int j=n/2; j>0; j--)
//j + (n-j) == n
if(primenumber[j] && primenumber[n-j])
{
//만족하게 된다면 그 값이 가장 차가 적은 소수의 합
cout << j << " " <<n-j << '\n';
return ;
}
}
int main() {
int T;
cin >> T;
int N; //4<=N<=10,000
for(int i=0; i<T; i++)
{
cin >> N;
prime(N); //소수판별
goldbach(N); //골드바흐의 추측
}
return 0;
}
'PS > BOJ C++' 카테고리의 다른 글
4781번 - 사탕가게 (0) | 2021.11.08 |
---|---|
2275번 - 부녀회장이 될테야 (0) | 2021.11.02 |
15661번 - 링크와 스타트 (0) | 2021.10.31 |
15989번 - 1, 2, 3 더하기 4 (0) | 2021.10.31 |
14888번 - 연산자 끼워넣기 (0) | 2021.10.27 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 17478
- 1715
- 자료구조
- 수학
- 삼성청년소프트웨어아카데미
- 파이썬
- 빌림
- 백준
- 싸피
- 스택
- heapq
- 딕셔너리
- 조합
- 2805
- 1358
- 1182
- 10816
- 큐
- 10971
- 11051
- 10815
- 프로그래머스
- 10845
- 러스트
- 1764
- 1759
- 덱
- 백트래킹
- dp
- 브루트포스
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
글 보관함