https://www.acmicpc.net/problem/2581
범위 내의 소수들의 합과, 그 소수들중 최솟값을 출력하는 문제.
역시 에라토스테네스의 체 가져다가 복붙하니 끝났다.
단, M=1, N=2일때를 주의해야 한다.
#include <stdio.h>
#define MAX_SIZE 10001
int main () {
/* 에라토스테네스의 체 */
int seive[MAX_SIZE] = {0,}; // 0부터 시작
for (int i = 2; i < MAX_SIZE; i++) {
seive[i] = 1;
}
for (int i = 2; i < MAX_SIZE; i++) {
if (seive[i]) {
for (int p = 2; i*p < MAX_SIZE; p++) {
seive[i*p] = 0;
}
}
}
int m, n; // 입력받을 정수 m <= n
int i;
scanf("%d %d", &m, &n);
int min = n + 1, sum = 0; // 범위내 소수 최솟값. 범위내의 가장 큰 값보다 1이 더 큰 값으로 초기화 / 범위 내 소수들의 합
for (i = m; i <= n; i++) {
if (seive[i]) {
min = min > i ? i : min;
sum += i;
}
}
if (min == n+1) { // min이 그대로 n인 경우, 즉 범위내에 소수가 발견되지 않으면
printf("-1");
} else {
printf("%d\n%d", sum, min);
}
return 0;
}
'coding_test > BAEKJOON' 카테고리의 다른 글
백준 1002번 C언어 풀이 (0) | 2021.09.12 |
---|---|
백준 3053번 C언어 풀이 (0) | 2021.09.10 |
백준 10757번 Python 풀이 (0) | 2021.09.10 |
백준 3009번 C언어 풀이 (0) | 2021.09.10 |
백준 2869번 C언어 풀이 (0) | 2021.09.09 |