에라토스테네스의 체 구해놓기 -- isPrime()
에라토스테네스의 체로 구해놓은 소수들을 벡터에 저장하기 -- getPrimes()
두 포인터를 이용해서 벡터에 저장해 놓은 소수를 스캔?하기 -- solve()
#include <iostream>
#include <vector>
#include <cmath>
using namespace std;
int N;
int cnt = 0;
vector<int> primes;
vector<int> v;
void input(){
cin >> N;
v.resize(N+1);
}
void isPrime(){
for(int i = 2; i <= int(sqrt(N)); i++){
if(v[i] != 0) continue;
for(int j = 2 * i; j <= N; j+= i){
v[j] = 1;
}
}
}
void getPrimes(){
for(int i = 2; i <= N; i++){
if(!v[i]){
primes.push_back(i);
}
}
}
void solve(){
int l = 0;
int r = 0;
int primeSum = 0;
while(true){
if(primeSum >= N){
primeSum -= primes[l];
l++;
}
else if(r == primes.size()) break;
else{
primeSum += primes[r];
r++;
}
if (primeSum == N) cnt++;
}
cout << cnt;
}
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
input();
isPrime();
getPrimes();
solve();
return 0;
}
