문제 링크 : https://www.acmicpc.net/problem/2581
vector STL을 사용해서 문제를 풀었다.
우선 m부터 n까지의 정수를 벡터 v1에 넣어준다.
벡터 v2를 선언해주고, 2부터 m-1까지의 정수를 넣어준다.
v1의 첫 원소부터 마지막 원소까지 돌면서, v1의 원소가 v2의 원소의 배수인지 확인한다.
만약 v1의 원소가 1이면 1은 소수가 아니므로 다음 원소로 넘어간다.
만약 배수가 아니라면 v1에 그대로 남겨두고 v2의 끝에 그 수를 추가해준다. 그리고 변수 sum에 해당 원소를 더해준다. 또한 변수 min의 값이 초기화시켰던 값인 -1이면 해당 원소를 min에 대입해준다.
만약 배수가 맞다면 다음 원소로 넘어간다.
이 과정을 진행하면 sum에는 v1의 원소들 중 소수들의 합이 담겨 있게 되고, min에는 v1의 원소들 중 가장 작은 소수가 담겨 있게 된다.
만약 v1에 소수가 하나도 없다면 sum 은 0이 되게 되므로 -1을 출력한다. sum이 0이 아니라면 sum과 min을 순서대로 출력한다.
#include <iostream>
#include <vector>
using namespace std;
int main() {
int m, n;
cin >> m;
cin >> n;
vector<int> v1;
vector<int> v2;
int sum = 0;
int min = -1;
for (int i = m; i <= n; i++) {
v1.push_back(i);
}
for (int i = 2; i < m; i++) {
v2.push_back(i);
}
for (int i = 0; i < v1.size(); i++) {
if (v1[i] == 1) {
continue;
}
bool primeNum = true;
for (int num : v2) {
if (v1[i] % num == 0) {
primeNum = false;
break;
}
}
if (primeNum == true) {
if (min == -1) {
min = v1[i];
}
sum += v1[i];
v2.push_back(v1[i]);
}
}
if (sum == 0) {
cout << -1 << '\n';
}
else {
cout << sum << '\n';
cout << min << '\n';
}
return 0;
}