에라토스테네스의 채를 이해하면 금방 풀 수 있다.

#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

+ Recent posts