본문 바로가기

알고리즘 문제풀이/추천 문제

[ 백준 2581 ] 소수 (C++)

반응형
 

2581번: 소수

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

www.acmicpc.net

 

소수 판별 함수 isprime()을 만들어주고 소수면 최소값 초기화, sum에 값을 더해준다. 최소값이 10000으로 변화 없으면 소수가 없다는 뜻이므로 -1을 반환해주고 그 외에는 sum, min을 차례대로 출력해준다.

 

#include <iostream>
using namespace std;

int isprime(int x){
    if(x == 1) return 0;
    if(x == 2) return 1;
    
    for(int i = 2; i < x; i++)
        if(x % i == 0)
            return 0;
    
    return 1;
}

int main(){
    int M, N, sum = 0, min = 10000;
    cin >> M >> N;
    
    for(int i = M; i <= N; i++){
        if(isprime(i)){
            sum += i;
            if(i < min)
                min = i;
        }
    }
    
    if(min == 10000)
        cout << -1 << endl;
    else{
        cout << sum << endl << min << endl;
    }
    
    return 0;
}
반응형