반응형
● 문제 접근 과정
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
반응형