소수의 연속합

링크: https://www.acmicpc.net/problem/1644

 

1644번: 소수의 연속합

첫째 줄에 자연수 N이 주어진다. (1 ≤ N ≤ 4,000,000)

www.acmicpc.net

 

처음 소수부터 입력받은 수 n까지 각 case를 판단한다.
각 소수부터 다음의 소수들 합을 구하고 입력받은 수와 같은지 판단한다.
같은 경우만 count하고, 출력한다.

 

  • 정답 코드

      #include<iostream>
      #include<vector>
      using namespace std;
    
      #define bigNum 4000001
      bool primeNumber[bigNum];
      vector<int> primeList;
    
      void setPrime() {
          for (int i = 2; i < bigNum; i++) {
              primeNumber[i] = true;
          }
    
          for (int i = 2; i < bigNum; i++) {
              if (!primeNumber[i]) continue;
    
              for (int j = 2 * i; j < bigNum; j += i) {
                  primeNumber[j] = false;
              }
          }
    
          for (int i = 2; i <= bigNum; i++) {
              if (primeNumber[i]) {
                  primeList.push_back(i);
              }
          }
      }
    
      int n;
      int count_ = 0;
    
      int main() {
          setPrime();
          cin >> n;
    
          for (int i = 2; i <= n; i++) {
              if (primeNumber[i]) {
    
              }
          }
          for (int i = 0; i < n; i++) {
              int sum = 0;
              for (int k = i; k < primeList.size() && sum < n; k++) {
                  sum += primeList[k];
              }
              if (sum == n)
                  count_++;
          }
          cout << count_;
    
          return 0;
      }

'ProblemSolving' 카테고리의 다른 글

[BOJ] 1377_버블 소트  (0) 2021.03.14
[BOJ] 1354_무한 수열 2  (0) 2021.03.13
[BOJ] 1737_Pibonacci  (0) 2021.03.06
[BOJ] 1047_2로 몇 번 나누어질까  (0) 2021.03.05
[BOJ] 1715_카드 정렬하기  (0) 2021.03.04
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기