728x90
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;
}
}
}
}
'BEAKJOON' 카테고리의 다른 글
백준(3009번 네 번째 점)풀이 C++ (0) | 2021.01.14 |
---|---|
백준(1085번 직사각형에서 탈출)풀이 C++ (0) | 2021.01.14 |
백준(4948번 베르트랑 공준)풀이 C++ (0) | 2021.01.13 |
백준(1929번 소수구하기)풀이 C++ (0) | 2021.01.13 |
백준(11653번 소인수분해)풀이 C++ (0) | 2021.01.13 |