백준 웹사이트 "2581번 - 소수" 문제풀이입니다.
언어는 C언어입니다. (제출 언어: C99)
문제
소스 코드
#include <stdio.h>
int main(void){
int M, N;
scanf("%d\n%d", &M, &N);
int sum=0, min=0;
for(int i=M; i<=N; i++){
// i가 소수인지 확인
for(int j=2; j<i; j++){ // 2는 고려하지 못함
if(i%j==0){
break;
}
if(j==i-1){
//i는 소수
sum+=i;
if(min==0)
min = i;
}
}
if(i==2){
sum+=i;
min=i; // 2는 가장 작은 소수
}
}
if(min!=0)
printf("%d\n%d", sum, min);
else
printf("-1");
}
문제 풀이
이전 문제인 1978번 문제와 비슷한 문제입니다. 이번에는 정해진 범위 내의 수들 중에, 소수들을 모두 찾아 그 합을 구하고, 소수들 중 최솟값을 구하는 문제입니다. M과 N을 입력 받으면, M부터 시작하여 각각의 수가 소수인지 아닌지 판별을 해야합니다. '소수 판별'을 위한 코드 Line 8 ~ 25는 1978번과 같은 코드를 (변수만 바꿔서) 사용하였습니다. 이 부분에 대한 설명은 1978번 풀이를 참고해주세요!
아래는 백준 웹사이트 "1978번 - 소수 찾기" 문제풀이 링크입니다.
M 부터 시작하여 숫자를 하나씩 검사할 때, 처음으로 만나게 되는 소수가 최솟값이 될 것입니다. 이때 변수 'min'은 처음 선언한 0으로 있을 것이기에, min이 0일 경우에만 min을 업데이트 시켜줍니다 (Line 18). 그 후 다른 소수들을 만날 때 min은 0이 아닐 것이기 때문에, min은 더 이상 업데이트 되지 않고 계속 최솟값을 가지게 됩니다. i가 2일 때도 예외적으로 sum과 min을 처리해주는 것도 까먹지 마세요!
반응형
'코딩 > 백준 BOJ' 카테고리의 다른 글
[백준/C언어] 1929번 - 소수 구하기 (0) | 2022.01.24 |
---|---|
[백준/C언어] 11653번 - 소인수분해 (0) | 2022.01.24 |
[백준/C언어] 1978번 - 소수 찾기 (0) | 2022.01.22 |
[백준/C언어] 1011번 - Fly me to the Alpha Centauri (0) | 2022.01.21 |
[백준/C언어] 10757번 - 큰 수 A+B (0) | 2022.01.20 |