티스토리 뷰

카테고리 없음

(백준) 2581 : 소수

채희태 2023. 4. 18. 11:30
728x90

문제

자연수 M과 N이 주어질 때 M이상 N이하의 자연수 중 소수인 것을 모두 골라 이들 소수의 합과 최솟값을 찾는 프로그램을 작성하시오.

예를 들어 M=60, N=100인 경우 60이상 100이하의 자연수 중 소수는 61, 67, 71, 73, 79, 83, 89, 97 총 8개가 있으므로, 이들 소수의 합은 620이고, 최솟값은 61이 된다.

입력

입력의 첫째 줄에 M이, 둘째 줄에 N이 주어진다.

M과 N은 10,000이하의 자연수이며, M은 N보다 작거나 같다.

출력

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

단, M이상 N이하의 자연수 중 소수가 없을 경우는 첫째 줄에 -1을 출력한다.

 

 

 

#include <stdio.h>
 
int main(){
    int a, b;
    scanf("%d\n%d", &a, &b);
  if(a>0 && b>0 && a<=10000 && b<=10000){
    int sum=0, min=1000001;
    for(int i=a; i<=b; i++){
       
        for(int j=2; j<i; j++){
            if(i%j==0){
                break;
            }
            if(j==i-1){
                sum+=i;
            if(i<min){
              min=i;
            }
          }
        }
      }   
  
    if(a < b && min != 1000001 && a<=2)
        printf("%d\n2", sum+2);
      else if(a < b && min != 1000001 && a>2)
        printf("%d\n%d", sum, min);
        else if(a==min){
          printf("%d\n%d", min, min);
        }
        else if(a==2 && b==2){
          printf("2\n2");
        }
    
    else
        printf("-1");
  }
}

1. 범위를 입력받는다.

2. 범위 안에서 소수를 찾기위해 이중반복문을 사용해준다.

3. 소수를 찾았으면 그 찾은 소수들의 합을 sum에 저장하고, 그중 가장 작은수를 min에 저장한다.

4. 입력받은 수의 범위 내에 소수가 있다면 sum, min을 출력하고

5. 없다면 -1을 출력한다.

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2026/10   »
일 월 화 수 목 금 토
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
글 보관함
250x250