⭐️ 소수 판별을 위해 에라토스테네스의 체 사용
누적합 - n
의 값이 소수 누적합 중에 존재하면 누적합 형성 가능하다고 판단find
함수로 하기누적합을 저장하는 과정과 부분합을 저장해서 사용할 때 find
를 사용해서 시간초과 뜨는 것 같지만 이 방법밖에 떠오르지 않았음
⭐️ 소수 판별을 위한 에라토스테네스의 체와 투포인터 사용
count++
투포인터를 사용해서 누적합을 저장할 저장공간도 save 하고 반복적인 for 문
사용도 방지함으로서 시간 save
#include <iostream>
#include <vector>
using namespace std;
int main() {
int n,end=0,start=0,ans=0,sum=0;
cin >> n;
if(n==1) {
cout <<0;
return 0;
}
vector<int> prime;
vector<int> v(n+1,0);
for(int i=2;i*i<=n;i++) {
if(v[i]==0) {
for(int j=i*i;j<=n;j+=i) {
v[j]=1;
}
}
}
for(int i=2;i<=n;i++) {
if(v[i]==0) prime.push_back(i);
}
while(end<=prime.size()) {
if(sum<n) {
sum+=prime[end];
end++;
}
else {
sum-= prime[start];
start++;
}
if(sum==n) ans++;
}
cout << ans;
}