반응형
https://www.acmicpc.net/problem/6588
6588번: 골드바흐의 추측
각 테스트 케이스에 대해서, n = a + b 형태로 출력한다. 이때, a와 b는 홀수 소수이다. 숫자와 연산자는 공백 하나로 구분되어져 있다. 만약, n을 만들 수 있는 방법이 여러 가지라면, b-a가 가장 큰
www.acmicpc.net
수학문제였습니다.
풀이방법
1. 에라토스테네스의 체를 이용해 i번째 수가 소수인 부분은 0 아닌 부분은 1로 ck배열에 저장합니다.
2. 답 출력 : i와 n-i가 모두 소수라면(ck배열에 해당 값이 0이라면) 정답을 출력합니다.
* 수학적으로 100만 이하의 소수 두 개의 합으로 모든 짝수를 표현할 수 있습니다. 따라서 안되는 경우는 없습니다. 낚시입니다.
Code
#include <bits/stdc++.h>
#define fastio ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
using namespace std;
int n;
int ck[1000001];
void makePrime(){
for(int i = 2; i*i <= 1000000; i++){
if(!ck[i]){
for(int j = i + i; j <= 1000000; j += i){
ck[j] = 1;
}
}
}
}
int main(){
fastio;
makePrime();
while(1){
cin >> n;
if(!n) break;
int a = 0,b = 0;
for(int i = 2; i <= n; i++){
if(!ck[i] && !ck[n-i]){
printf("%d = %d + %d\n", n,i,n-i);
break;
}
}
}
}
'Algorithm > Math' 카테고리의 다른 글
(C++) - 백준(BOJ) 13251번 : 조약돌 꺼내기 (0) | 2021.07.09 |
---|---|
(C++) - 백준(BOJ) 11444번 : 피보나치 수 6 (0) | 2021.07.09 |
(Python) - 백준(BOJ) 16428번 : A/B - 3 (0) | 2021.05.27 |
(C++) - 프로그래머스(연습문제) : 줄 서는 방법 (0) | 2021.05.21 |
(C++) - 프로그래머스(연습문제) : 최고의 집합 (0) | 2021.05.18 |