2960 에라토스테네스의 체
2960번: 에라토스테네스의 체
문제 에라토스테네스의 체는 N보다 작거나 같은 모든 소수를 찾는 유명한 알고리즘이다. 이 알고리즘은 다음과 같다. 2부터 N까지 모든 정수를 적는다. 아직 지우지 않은 수 중 가장 작은 수를 찾는다. 이것을 P라고 하고, 이 수는 소수이다. P를 지우고, 아직 지우지 않은 P의 배수를 크기 순서대로 지운다. 아직 모든 수를 지우지 않았다면, 다시 2번 단계로 간다. N, K가 주어졌을 때, K번째 지우는 수를 구하는 프로그램을 작성하시오. 입력 첫째 줄에
www.acmicpc.net
<에라토스테네스의 체>
소수 찾기 알고리즘
n보다 작거나 같은 모든 소수를 찾기위해서
크기가 n+1인 배열을 선언한다
그리고 인덱스가 2의 배수면 1로 바꿔주고,n-1의 배수 까지 1로 바꾸면
소수가 아닌 수는 값이 1이고 소수인 값은 0일 것이다.
이 문제는 소수를 찾는 것이 아닌 k번째로 지워진 수가 정답이다
이 문제에서는 n이 최대 1000이므로
int prime[1001]로 선언하였다.( 0으로 초기화 해준다.)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
#include <iostream>
using namespace std;
int main(void)
{
int n, k;
int prime[1001];
cin >> n >> k;
for (int i = 0; i < 1001; ++i)
prime[i] = -1;
int a = 0;
int ans = 0;
for (int i = 2; i <= n; ++i) {
for (int j = 1; j <= (n / i); ++j) {
if (prime[i*j] < 0) {
prime[i*j] = 1;
a++;
if (a == k)
ans = i*j;
}
}
}
cout << ans << endl;
return 0;
}
|
cs |
'알고리즘 > BOJ' 카테고리의 다른 글
백준 1720 타일 코드 (0) | 2020.02.05 |
---|---|
백준 1541 잃어버린 괄호 (0) | 2019.12.25 |
백준 2138 전구와 스위치 (0) | 2019.12.02 |
백준 1212 8진수 2진수 (0) | 2019.12.02 |
백준 14720 우유 축제 (2) | 2019.12.02 |