문제

링크

풀이

#include <stdio.h>
#include <stdbool.h>
 
int main(void) {
  int n, cnt = 0;
  bool prime[4000001];
  long long a[300000];
 
  for (int i=2; i<=4000000; i++) {
    prime[i] = (i % 2 == 0) ? false : true;
  }
  for (int i=3; i<=2000; i+=2) {
    if (prime[i]) {
      for (int j=i*i; j<=4000000; j+=2*i) {
        prime[j] = false;
      }
    }
  }
 
  a[cnt++] = 0;
  a[cnt++] = 2;
  for (int i=3; i<=4000000; i++) {
    if (prime[i]) a[cnt++] = i;
  }
 
  for (int i=1; i<cnt; i++) {
    a[i] += a[i-1];
  }
 
  scanf("%d", &n);
  int ans = 0, l = 0, r = 1;
  for (int l=0, r=1; l<=r && r<cnt;) {
    if (a[r] - a[l] > n) l++;
    else if (a[r] - a[l] < n) r++;
    else if (a[r] - a[l] == n) ans++, l++, r++;
  }
 
  printf("%d", ans);
  return 0;
}