반응형

● 문제 접근 과정

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

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

3. 입력의 첫째 줄에 M이, 둘째 줄에 N이 주어진다. M과 N은 10,000이하의 자연수이며, M은 N보다 작거나 같다.

4. M이상 N이하의 자연수 중 소수인 것을 모두 찾아 첫째 줄에 그 합을, 둘째 줄에 그중 최솟값을 출력한다. 단, M이상 N이하의 자연수 중 소수가 없을 경우는 첫째 줄에 -1을 출력한다.

5. 일단 두 수를 입력받기 위해 변수 a,b를 선언한다.

6. 두 수 사이의 소수를 찾아야 하기에 해당 반복문을 돌리고, 소수라면 arr라는 배열에 넣고, index변수를 ++ 해준다.

7. 반복문이 끝나고, index가 0이라면, 두 수 사이의 소수가 존재하지 않기에 -1을 출력.

8. 아니라면 arr배열을 index까지 반복하여, sum값에 계속 더해준다.

9. sum을 출력하고, 다음줄에는 최소 값인 arr[0]를 출력한다.

● 구현

#include <iostream>
using namespace std;

int main() {
  int a, b;
  int cnt = 0;
  int index = 0;
  int sum = 0;
  int arr[10001] = {
      0,
  };

  cin >> a >> b;

  for (int i = a; i <= b; i++) {
    for (int j = 1; j <= i; j++) {
      if (i % j == 0)
        cnt++;
    }
    if (cnt == 2) {
      arr[index] = i;
      cnt = 0;
      index++;
    } else
      cnt = 0;
  }
  if (index == 0)
    cout << -1;
  else {
    for (int i = 0; i <= index; i++) {
      sum += arr[i];
    }
    cout << sum << endl << arr[0];
  }

  return 0;
}

 

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

 

2581번: 소수

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

www.acmicpc.net

 

반응형

+ Recent posts