반응형
문제 링크 : https://www.acmicpc.net/problem/1644
1644번: 소수의 연속합
문제 하나 이상의 연속된 소수의 합으로 나타낼 수 있는 자연수들이 있다. 몇 가지 자연수의 예를 들어 보면 다음과 같다. 3 : 3 (한 가지) 41 : 2+3+5+7+11+13 = 11+13+17 = 41 (세 가지) 53 : 5+7+11+13+17 = 53 (두
www.acmicpc.net

>풀이
에라토스테네스의 체(소수 구하기) 알고리즘 과, 투포인터 알고리즘을 사용
#include <cstdio>
#include <vector>
#include <algorithm>
using namespace std;
int main(void) {
int N;
vector<bool> check;
vector<int> prime;
scanf("%d", &N);
check.resize(N + 1, true);
for (int i = 2; i * i <= N; i++) {
if (check[i] == true) {
for(int j = i + i; j <= N; j += i)
check[j] = false;
}
}
for (int i = 2; i < N + 1; i++) {
if (check[i] == true)
prime.push_back(i);
}
int cnt = 0, high = 0, low = 0, sum = 0;
while (1) {
if (sum >= N)
sum -= prime[low++];
else if (high == prime.size())
break;
else
sum += prime[high++];
if (sum == N) cnt++;
}
printf("%d", cnt);
return 0;
}
(개발 환경 : vs code)
반응형
'알고리즘 (백준) > BOJ 길라잡이 (1)' 카테고리의 다른 글
백준 1016 (제곱 ㄴㄴ 수) / C++ (0) | 2020.07.20 |
---|---|
백준 6588 (골드바흐의 추측) / C++ (0) | 2020.07.20 |
백준 2485 (가로수) / C++ (0) | 2020.07.17 |
백준 2580 (스도쿠) / C++ (0) | 2020.07.16 |
백준 2661 (좋은 수열) / C++ (0) | 2020.07.16 |