문제
자연수 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을 출력한다.
Solved.ac 레벨
실버 V
풀이
#include <bits/stdc++.h>
using namespace std;
int m, n;
int minVal = -1;
int sum;
int main(){
ios::sync_with_stdio(false);
cin.tie(NULL); cout.tie(NULL);
cin >> m >> n;
for(int i = m; i <= n; i++){
int j;
if(i == 0 || i == 1) continue;
for(j = 2; j <= i; j++){
if(i % j == 0) break;
}
if(i == j){
if(minVal == -1) minVal = i;
sum += i;
}
}
if(minVal != -1){
cout << sum << '\n' << minVal << '\n';
} else cout << minVal << '\n';
return 0;
}
이번에 문제를 풀어나가는 방법을 카테고리별 풀이가 아닌, 난이도에서 랜덤한 문제를 골라 카테고리를 파악하고 속도감있게 알고리즘을 적용하여 푸는 방식으로 변화시켜보고 있는데, 그 첫 문제다... 생각 외로 실전에 약할듯?
'Study (etc) > Problem Solving' 카테고리의 다른 글
[BOJ / C++] 7785번 : 회사에 있는 사람 (1) | 2022.09.29 |
---|---|
[BOJ / C++] 1303번 : 전쟁 - 전투 (0) | 2022.09.26 |
[BOJ / C++] 9237번 : 이장님 초대 (0) | 2022.09.22 |
[BOJ / C++] 5014번 : 스타트링크 (BFS) (0) | 2022.09.14 |
[BOJ / C++] 15852번 : 1로 만들기 2 (0) | 2022.09.13 |