페이지

1644번: 소수의 연속합

https://www.acmicpc.net/problem/1644


#include<stdio.h>
#include<algorithm>
using namespace std;
const int MAX_N = 4e6;
typedef long long ll;
int n, ck[MAX_N + 1], pcnt, res;
ll p[MAX_N + 1];
int main() {
    for (int i = 2; i <= MAX_N; i++) {
        if (ck[i]) continue;
        p[++pcnt] = i;
        p[pcnt] += p[pcnt - 1];
        for (int j = i; j <= MAX_N; j += i) ck[j] = 1;
    }
    scanf("%d", &n);
    for (int i = 0; i < pcnt; i++) {
        int h = lower_bound(p + 1, p + 1 + pcnt, p[i] + n) - p;
        res += h != pcnt + 1 && p[h] == p[i] + n;
    }
    printf("%d", res);
    return 0;
}

댓글 없음 :

댓글 쓰기