티스토리 뷰

백준

백준 소스코드 [C++] 1644 소수의 연속합

Hani_Levenshtein 2021. 2. 22. 04:46

www.acmicpc.net/problem/1644

 

1644번: 소수의 연속합

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

www.acmicpc.net

백준 소스코드 [C++] 1644 소수의 연속합

#include <iostream>
#include <algorithm>
#include <queue>
#include <string.h>
#include <limits.h>
#include <vector>
#include <math.h>
#include <stack>
#include <bitset>
#include <string>
#include <set>
#define all(v) v.begin(), v.end()
#define pii pair<int,int>
#define make_unique(v) v.erase(unique(v.begin(), v.end()), v.end())
typedef long long ll;
using namespace std;
bool notSosu[4000001];
int main() {
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	int n;
	cin >> n;
	for (int i = 2;i <= sqrt(4000000);i++) {
		if (notSosu[i] == false) {
			for (int j = i * i;j <= 4000000;j = j +i)
				notSosu[j] = true;
		}
	}

	vector<int> prime;
	for (int i = 2; i < 4000000; i++) {
		if (notSosu[i] == false)
			prime.push_back(i);
	}

	int l = 0, r = 0,sum=0,cnt=0;
	while (true) {
		if (sum >= n) sum -= prime[l++];
		else if (r == prime.size()) break;
		else sum += prime[r++];
		
		if (sum == n) cnt++;
	}
	cout << cnt;

	return 0;
}
댓글