https://www.acmicpc.net/problem/1644
n이하의 소수를 모두 구해놓고 투포인터를 적용해주면 된다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | #include<iostream> #include<vector> using namespace std; int n, prime[4000000], num = 1; void findPrime() { prime[0] = 2; for (int i = 3; i <= n; i++) { bool isPrime = true; for (int j = 2; j*j <= i; j++) { if (i % j == 0) { isPrime = false; break; } } if (isPrime) prime[num++] = i; } } int main(void) { cin >> n; findPrime(); int cnt = 0, low = 0, high = 0; long long Sum = prime[0]; while (1) { if (high >= num) break; if (Sum < n) { Sum += prime[++high]; } else if (Sum == n) { cnt++; Sum += prime[++high]; } else { Sum -= prime[low++]; if (low > high) { if (prime[high] >= n) break; else { high = low; Sum = prime[high]; } } } } cout << cnt; } | cs |
'알고리즘 문제 풀이 > 백준 온라인 저지' 카테고리의 다른 글
백준 3190번: 뱀 (C++) (0) | 2019.08.30 |
---|---|
백준 1339번: 단어 수학 (C++) (0) | 2019.08.29 |
백준 2003번: 수들의 합 2 (C++) (0) | 2019.08.29 |
백준 13458번: 시험 감독 (C++) (0) | 2019.08.29 |
백준 14500번: 테트로미노 (C++) (0) | 2019.08.29 |