백준/약수, 배수와 소수

4948번: 베르트랑 공준 [C++]

Koalitsiya 2023. 3. 29. 11:55

문제

 

 

풀이

에라토스테네스의 체를 이용해 주어진 범위 내의 소수의 개수를 구하였다.

#include <iostream>
#include <cmath>

using namespace std;

int main() {
	int a[246913];
	int n;
	
	cin >> n;

	while (1) {
		int count = 0;

	
		a[0] = 0;
		a[1] = 0;

		for (int i = 2; i <= 2 * n; i++)
			a[i] = 1;

		for (int i = 2; i <= int(sqrt(2 * n)); i++) {
			for (int j =2; i*j <= 2*n; j++) {
				a[i*j] = 0;                  
			}
		}

		for (int k = n+1; k <= 2 * n; k++) {
			if (a[k] == 1)
				count++;
		}


		cout << count << '\n';


		cin >> n;
		if (n == 0)
			break;
	}

}