尺选法。
没有删除掉freopen和fclose,WA,然后检查了一个小时,但是我是注释掉了它们的啊,不解。
//188k, 0ms
#include <iostream>
using namespace std;
const int MAX_N = 10016;
int x;
bool is_pri[MAX_N];
int pri[MAX_N];
void sieve() {
int ids = 0;
for(int i=0; i<MAX_N; i++) is_pri[i] = true;
is_pri[0] = is_pri[1] = false;
for(int i=2; i<MAX_N; i++) {
if(is_pri[i]) {
pri[ids++] = i;
for(int j=2*i; j<MAX_N; j+=i) is_pri[j] = false;
}
}
}
int main() {
sieve();
freopen("in.txt", "r", stdin);
while(~scanf("%d", &x)) {
if(x == 0) break;
int res = 0, s = 0, t = 0, sum = 0;
for(;;) {
while(pri[t] <= x && sum < x)
sum += pri[t++];
if(sum <= 0) break;//说明尾部一直没有增加,且头部赶上了尾部,结束
if(sum == x) res++;
sum -= pri[s++];
}
printf("%d\n", res);
}
fclose(stdin);
return 0;
}