[백준] 2581번 소수 C++ 문제 풀이 수학 2
2020. 2. 17. 18:01ㆍ알고리즘/백준
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을 출력한다.
예제 입력 1
60
100
예제 출력 1
620
61
예제 입력 2
64
65
예제 출력 2
-1
문제 풀이
#include <iostream>
#include <cmath>
using namespace std;
int main() {
int M, N, root, min, sum = 0;
cin>>M>>N;
for(int i=M; i<=N; i++){
root = sqrt(i);
if(root == 1 && i != 1){
if(!sum)
min=i;
sum+=i;
continue;
}
if(i%2){
for(int j=2; j<=root; j++){
if(!(i%j))
break;
if(j == root){
if(!sum)
min = i;
sum+=i;
}
}
}
}
if(!sum)
cout<<-1;
else
cout<<sum<<'\n'<<min<<'\n';
}
이전 문제와 동일한 방식으로 알고리즘을 구현하였고
다른 점은 입력이 하나씩 주어졌던 것과 달리 M부터 N까지 반복해야 하는 것과
소수의 합, 소수 중 최솟값을 출력해야 하는 것, 소수가 없을 경우 -1을 출력해야 하는 것입니다.
출처 : https://www.acmicpc.net/problem/2581
728x90
반응형
'알고리즘 > 백준' 카테고리의 다른 글
[백준] 4948번 베르트랑 공준 C++ 문제 풀이 수학 2 (0) | 2020.02.19 |
---|---|
[백준] 1929번 소수 구하기 C++ 문제 풀이 수학 2 (0) | 2020.02.18 |
[백준] 1978번 소수 찾기 C++ 문제 풀이 수학 2 (0) | 2020.02.11 |
[백준] 1011번 Fly me to the Alpha Centauri C++ 문제 풀이 수학 1 (0) | 2020.01.30 |
[백준] 2775번 부녀회장이 될테야 C++ 문제 풀이 수학 1 (6) | 2020.01.29 |