매일 BOJ

(매일 BOJ) C++ 2581번 소수

norepinephrine 2025. 7. 18. 11:48

이번 문제는 브론즈 2 난이도의 2581번 소수다.

접근법

이 문제에서 최대 입력값이 10000이기에 이 문제는 에라스토테네스의 체를 사용하지 않고도 2부터 특정값의 루트값까지 반복문을 통해 나누어 1이 되는지를 확인하면 해결할 수 있다.

 

작성코드

#include <bits/stdc++.h>
using namespace std;

bool isPrime(int n) {
    if (n < 2) return false;
    for (int i = 2; i <= int(sqrt(n)); i++) {
        if (n % i == 0) return false;
    }
    return true;
}

int main(void) {
    ios::sync_with_stdio(0); cin.tie(0);
    int M, N;
    cin >> M >> N;
    int sum = 0, minPrime = -1;
    
    for (int i = M; i <= N; i++) {
        if (isPrime(i)) {
            sum += i;
            if (minPrime == -1) minPrime = i;
        }
    }

    if (minPrime == -1) cout << -1 << '\n'; // 소수가 없을 경우
    else cout << sum << '\n' << minPrime << '\n';

    return 0;
}