알고리즘/문제풀이

[백준] 2581 - 소수찾기(3)

무하지 2020. 12. 25. 21:38
반응형

문제 : www.acmicpc.net/problem/2581

 

2581번: 소수

M이상 N이하의 자연수 중 소수인 것을 모두 찾아 첫째 줄에 그 합을, 둘째 줄에 그 중 최솟값을 출력한다.  단, M이상 N이하의 자연수 중 소수가 없을 경우는 첫째 줄에 -1을 출력한다.

www.acmicpc.net

 

 

이전 문제와 거의 똑같은 문제다.

 

이전 문제: 2020/12/25 - [프로그래밍/문제 풀이] - [문제풀이] 백준 1929번 - 소수찾기(2) {시간초과이슈}

 

[문제풀이] 백준 1929번 - 소수찾기(2) {시간초과이슈}

문제: www.acmicpc.net/problem/1929 1929번: 소수 구하기 첫째 줄에 자연수 M과 N이 빈 칸을 사이에 두고 주어진다. (1 ≤ M ≤ N ≤ 1,000,000) M이상 N이하의 소수가 하나 이상 있는 입력만 주어진다. www.acm..

lwamuhaji.tistory.com

 

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
31
32
33
34
35
#include<stdio.h>
 
int main() {
    int m, n;
    scanf_s("%d %d"&m, &n);
    bool* a = new bool[n + 1]; 
    //a[i]는 i가 소수인지 아닌지 알려준다.
    //a[i]가 true이면 i가 소수이고, false면 아니다.
 
    for (int i = 2; i < n + 1; i++)
        a[i] = true//일단 모두 true로 초기화한다.
 
    for (int i = 2; i < n + 1; i++) {
        if (a[i]) { //만약 i가 소수라면
            for (int k = i * 2; k < n + 1; k += i) {
                a[k] = false;  //i의 배수는 모두 소수가 아니므로 false로 바꾼다.
            }
        }
    }
 
    int sum = 0, min;
 
    for (int i = m; i < n + 1; i++) {
        if (a[i]) { //만약 i가 소수라면
            if (sum == 0)
                min = i;
            sum += i;
        }
    }
 
    if (sum == 0)
        printf("-1");
    else
        printf("%d\n%d", sum, min);
}

cs

 

 

반응형