BEAKJOON
백준(9020번 골드바흐의 추측)풀이 C++
Shin_jisoo
2021. 1. 13. 17:25
728x90
9020번: 골드바흐의 추측
1보다 큰 자연수 중에서 1과 자기 자신을 제외한 약수가 없는 자연수를 소수라고 한다. 예를 들어, 5는 1과 5를 제외한 약수가 없기 때문에 소수이다. 하지만, 6은 6 = 2 × 3 이기 때문에 소수가 아
www.acmicpc.net
1) 주석 없는 VERSION
#include <iostream>
#include <cmath>
#include <cstdio>
using namespace std;
int find(int n) {
if (n == 0)return false;
for (int i = 2;i <= sqrt(n);i++) {
if (n % i == 0) {
return false;
break;
}
}
return true;
}
int main() {
int t;
cin >> t;
for (int i = 0;i < t;i++) {
int n;
cin >> n;
int a, b;
for (int j = n/2;j >=2;j--) {
a = j;
b = n - a;
if (find(a) && find(b)) {
cout << a << " " << b << "\n";
break;
}
}
}
}
2) 주석 있는 VERSION
더해줄 두 소수의 차이가 가장 적을 경우는 소수가 서로 같을 때 => n/2 부터 순차적으로 검사
항상 a+(n-a)=a 이므로
b를 n-a 로 두고
a와 b 두 수가 소수인지 판별하여 소수인 경우 출력하도록 함
#include <iostream>
#include <cmath>
#include <cstdio>
using namespace std;
// 소수 찾는 함수
int find(int n) {
if (n == 0)return false;
for (int i = 2;i <= sqrt(n);i++) {
if (n % i == 0) {
return false;
break;
}
}
return true;
}
int main() {
int t;
cin >> t;
for (int i = 0;i < t;i++) {
int n;
cin >> n;
int a, b;
// 두 수의 차이가 가장 적게 나는 것은 두 소수가 서로 같을 때 이므로
// n/2 부터 순차적으로 검사
for (int j = n/2;j >=2;j--) {
// 항상 a + (n - a) = a 이므로 b = n - a로 둠
a = j;
b = n - a;
// a 와 b가 둘 다 소수일 경우 출력
if (find(a) && find(b)) {
cout << a << " " << b << "\n";
break;
}
}
}
}