Algorithm/Baekjoon

🟡[백준 2581] C++ - 소수 구하기

say! 2024. 7. 22. 14:21
728x90

 

 

[C++] vector container 정리 및 사용법

안녕하세요. BlockDMask 입니다.오늘은 C++ STL의 sequence container 중에 정말 자주 쓰는 vector에 대해서 알아보겠습니다. 1) vector container 란?2) vector의 사용 3) vector의 생성자와 연산자4-1) vector의 멤버 함수

blockdmask.tistory.com

 

🟡틀린 코드 >> 원인 못찾음

//백준 2581 - 소수
#include <cstdio>
#include <vector>
#include <algorithm>
#include <numeric>  //accumulate 함수 사용
using namespace std;

int main(){
  int m, n; 
  scanf("%d", &m);
  scanf("%d", &n);

  // m이상 n이하의 자연수 중 소수 찾기
  vector<int> prime;
  for(int i = m; i <= n; i++){
    for(int j = 2; j <= i/2; j++){
      if(i % j == 0)  break;  
      if(j == i/2)
      prime.push_back(i);
    }
  }
  
  if(prime.size() == 0) printf("-1");
  else{
    // 소수의 합 출력
    int sum = accumulate(prime.begin(), prime.end(), 0);
    printf("%d\n", sum);
    // 소수 중 최솟값 출력
    sort(prime.begin(), prime.end());
    printf("%d", prime[0]);
    return 0;
  }
}

위 코드가 왜 틀렸다고 채점되는지 모르겠다..

 

🔵맞은 코드

#include <cstdio>
#include <vector>
#include <algorithm>
#include <numeric>  //accumulate 함수 사용
#include <cmath>    // sqrt 함수 사용

using namespace std;

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

int main() {
    int m, n; 
    scanf("%d", &m);
    scanf("%d", &n);

    // m 이상 n 이하의 자연수 중 소수 찾기
    vector<int> prime;
    for (int i = m; i <= n; i++) {
        if (isPrime(i)) {
            prime.push_back(i);
        }
    }

    if (prime.empty()) {
        printf("-1\n");
    } else {
        // 소수의 합 출력
        int sum = accumulate(prime.begin(), prime.end(), 0);
        printf("%d\n", sum);
        // 소수 중 최솟값 출력
        printf("%d\n", prime[0]);
    }

    return 0;
}