에라토스테네스의 채를 이해하면 금방 풀 수 있다.
#include <iostream>
#include <vector>
#include <cmath>
using namespace std;
bool cache[123456 * 2 + 1];
int main() {
vector<int> inputs;
int a;
while (true) { //input
cin >> a;
if (a == 0 || a > 123456) break;
inputs.push_back(a);
}
for (int i = 2; i < 123456 * 2; i++)
cache[i] = true;
for (int i = 2; i < sqrt(123456 * 2); i++) {
if (cache[i]) {
for (int j = i + i; j <= 123456 * 2; j += i) {
cache[j] = false;
}
}
}
for (int i = 0; i < inputs.size(); i++) {
int count = 0;
for (int j = inputs[i]+1; j <= inputs[i]*2; j++) {
if (cache[j]) {
count++;
}
}
cout << count << endl;
}
}
'컴퓨터 > 문제 풀기' 카테고리의 다른 글
백준 8741번 이진수 합 (0) | 2019.07.29 |
---|---|
백준 8595번 히든넘버 (0) | 2019.05.27 |
백준 1946번 신입 사원 (0) | 2019.05.20 |
백준 16955번 오목, 이길 수 있을까? (0) | 2019.05.20 |
10799번 쇠막대기 (0) | 2019.05.13 |