백준(BaekJoon)

[BaekJoon/C] No.2581 : 소수

ekdnjs510 2024. 7. 17. 00:01
728x90

https://www.acmicpc.net/problem/2581

No.2581 문제

 

문제해석

입력받은 값 M에서부터 N 사이의 수를 순회하며 소수임을 판별해주는 코드를 작성해줍니다.

(2로 나누어 떨어지는 부분 / 나누어 떨어지지 않는 부분)

소수가 되는 처음 부분을 최솟값으로 설정해주고 반복문을 순회하여 저장한 소수를 더해가며 소수의 합을 구해줍니다.

소스코드 & 문제해결

#include <stdio.h>

int main(void) {
    int M, N; //변수 설정
    scanf("%d\n%d", &M, &N); //두 개의 변수 입력받기

    int sum = 0, min = 0; //소수의 합과 최솟값 초기화
    
    //처음 변수부터 두번째 변수까지 순회하며 i가 소수인지 확인
    for (int i = M; i <= N; i++) {
        
        for (int j = 2; j < i; j++) { //반복문 변수 j가 2는 고려X 않으며 소수를 확인
            
            //i가 j로 나누어떨어지면 소수가 아니게 됨->탈출
            if (i % j == 0) {
                break;
            }
           
            //i가 소수면 소수의 합을 sum에 저장
            if (j == i - 1) {
                sum += i;
                if (min == 0) 
                    min = i; //저장된 소수의 최솟값이 없으면 저장
            }
        }
        
        //만약 n1이 2가 포함되면 2는 가장 작은 소수이며 소수 합계에 더해주기
        if (i == 2) {
            sum += i;
            min = i;
        }
    }
    if (min != 0)
        printf("%d\n%d", sum, min); //소수의 최솟값이 있다면 반복문에서 저장한 값 출력
    else
        printf("-1"); //소수의 최솟값이 없다면 -1 출력
}

 

 

예제 입출력 결과

728x90