알고리즘/BaekJoon

백준 1929 : 소수 구하기

꾸준하게 :) 2020. 3. 4. 15:35

문제 링크입니다 https://www.acmicpc.net/problem/1929

 

1929번: 소수 구하기

첫째 줄에 자연수 M과 N이 빈 칸을 사이에 두고 주어진다. (1 ≤ M ≤ N ≤ 1,000,000)

www.acmicpc.net

입력으로 주어지는 자연수 M과 N이 있을 때, M 이상 N 이하의 소수를 모두 출력하는 문제였습니다. 에라토스테네스의 체를 이용해 문제를 해결했습니다. 

 

 

[소스코드]

 

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
#include<cstdio>
int m, n;
 
// 인덱스에 해당하는 수가 소수이면 false
// 소수가 아니면 true가 들어있는 배열
bool check[1000001];
 
int main(void) {
    scanf("%d%d"&m, &n);
    check[1= true;      // 1은 소수가 아닙니다
    if (n == 1return 0// n이 1이면 아무것도 출력하지 않고 종료
    
    // 2부터 n까지의 수 중 소수이면 해당 수의 배수들은 
    // 절대 소수가 아니므로 배수들을 true로 만들어줍니다
    for (int i = 2; i <= n; i++) {
        if (!check[i]) {
            for (int j = i * 2; j <= n; j += i)
                check[j] = true;
        }
    }
    // m 이상 n 이하의 모든 소수를 출력합니다
    for (int i = m; i <= n; i++)
        if (!check[i]) printf("%d\n", i);
    return 0;
}
cs

 

'알고리즘 > BaekJoon' 카테고리의 다른 글

백준 17472 : 다리 만들기 2  (0) 2020.03.05
백준 1644 : 소수의 연속합  (0) 2020.03.04
백준 1978 : 소수 찾기  (0) 2020.03.04
백준 1806 : 부분합  (0) 2020.03.04
백준 2003 : 수들의 합 2  (0) 2020.03.04