코딩/백준
[백준][C] 2581. 소수
rivermoon
2022. 10. 4. 10:47
https://www.acmicpc.net/problem/2581
예제 입력
60
100
예제 출력
620
61
해결 방법
m부터 n까지 반복해야 하기 때문에 반복문을 만들었습니다.
또한 소수의 합을 저장할 변수 sum도 만들었습니다.
만일 m이 1인 경우, 1은 소수가 아니기에 잘못된 계산을 피하기 위하여 m++; 으로 건너뛰도록 작성하였습니다.
또한 for 문은 m부터 시작하여 n까지 반복되기에 가장 작은 소수를 저장할 first 변수를 0으로 만들고
초기화한 후 반복문 진행 중 소수이면서 first가 0인 경우 그 수를 first에 저장하도록 하였습니다.
처음 first에 저장된 수가 그 범위 내에서 가장 작은 소수가 되겠죠.
다음에 더 큰 수가 소수가 되어도 이미 first가 0이 아니기 때문에 변수의 값이 변하는 일은 없습니다.
또한 m, n 사이에 소수가 없는 경우, 즉 소수의 합 sum이 0인 경우에는 -1을 출력하도록 마무리하였습니다.
(문제 조건)
코드
#include <stdio.h>
int main(){
int m, n, prime, first = 0, sum = 0;
scanf("%d\n%d", &m, &n);
if (m == 1) m++;
for (int i = m; i <= n; i++){
prime = 1;
for (int j = 2; j < (i - 1); j++){
if (i % j == 0) prime = 0;
}
if (prime == 1){
sum += i;
if (first == 0){
first = i;
}
}
}
if (sum == 0) printf("-1");
else printf("%d\n%d", sum, first);
}