백준 문제풀이
4948번 문제 : 베르트랑 공준
문제 :
소스코드 :
#include <iostream>
using namespace std;
int primeNum(int n) {
int size = 123456 * 2 + 1;
int a[size] = {0,1};
int cnt = 0;
for(int i=2; i<=n*2; i++) {
for(int j=2; i*j<=n*2; j++) {
a[i*j] = 1;
}
}
for(int i=n+1; i<=n*2; i++) {
if (a[i] == 0) {
cnt += 1;
}
}
return cnt;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
int num;
int result;
while(true) {
cin >> num;
if (num == 0) {
break;
}
cout << primeNum(num) << "\n";
}
return 0;
}
for(int i=2; i<=n*2; i++) 이 부분에서
생각없이 n*2이 아니라 n으로 짰더니 넣은 수가 그대로 출력되서 당황했다..
잘 보고, 생각하고 코드를 작성하자
9020번 문제 : 골드바흐의 추측
문제 :
소스코드 :
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
void primeNum(int n) {
int size = 10001;
int a[size] = {0,1};
vector<int> v;
for(int i=2; i<=n; i++) {
for(int j=2; i*j<=n; j++) {
a[i*j] = 1;
}
}
for(int i=2; i<=n; i++) {
if (a[i] == 0) {
v.push_back(i);
}
}
// n[i]는 소수, n - n[i] 역시 소수일 경우 골드바흐 파티션 출력 가능
// n - n[i]가 벡터에 존재하면 n - n[i]도 소수
int number;
vector<int> vv;
int min = 2147000000;
int last;
for(int i=0; i<v.size(); i++) {
number = n - v[i];
if(find(v.begin(), v.end(), number) != v.end()) {
// 두 소수의 차이가 가장 작은 것을 출력하기
if(abs(number - v[i]) < min) {
min = abs(number - v[i]);
last = v[i];
}
}
}
cout << last << " " << n - last << "\n";
return;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
int t, num;
cin >> t;
for(int i=0; i<t; i++) {
cin >> num;
primeNum(num);
}
return 0;
}
'C++ 코딩테스트 공부 (중단) > c++ 백준 문제풀이' 카테고리의 다른 글
백준 c++ 2447번 별찍기 - 10 (0) | 2022.05.22 |
---|---|
백준 c++ 17478번 문제 : 재귀함수가 뭔가요? (0) | 2022.05.21 |
#8 기본 수학2 - 1 (0) | 2022.04.05 |
#7 기본 수학1 - 2 (0) | 2022.04.04 |
#7 기본 수학1 - 1 (0) | 2022.04.01 |