Link https://www.acmicpc.net/problem/4948
결과 2544KB / 4 ms
언어 C++ 17
풀이
에라토스테네스의 체의 연장선
소수를 구하는게 중요한 문제
n이 123456 까지기 때문에 2부터 2n까지의 소수를 전부 구하면 된다.
소수를 구한 뒤 개수는 매 순간 반복문을 통해 구해도 문제가 없다.
소스코드
#include <iostream>
using namespace std;
const int MAX = 50000;
int prime[MAX];
int primeCount;
void eratos() {
const int max = 123456 * 2 * 2;
bool check[max + 1] = {true, true};
for (int i = 2; i < max + 1; i++) {
if (!check[i]) {
prime[primeCount++] = i;
for (int j = 2; i * j < max + 1; j++)
check[i * j] = true;
}
}
}
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(0);
eratos();
int val; cin >> val;
while (val) {
int res = 0;
int str = 0;
while (prime[str] <= val)
str++;
for (int i = str; prime[i] <= (2 * val); i++)
res++;
cout << res << '\n';
cin >> val;
}
return 0;
}
'Algorithm > Mathematics' 카테고리의 다른 글
Baekjoon 3896 소수 사이 수열 (0) | 2019.11.11 |
---|---|
Baekjoon 1929 소수 구하기 (0) | 2019.08.23 |
Baekjoon 1644 소수의 연속합 (0) | 2019.08.23 |
Baekjoon 1722 순열의 순서 (0) | 2019.08.19 |
Baekjoon 13251 조약돌 꺼내기 (0) | 2019.08.19 |