这个题没想出什么好的算法。。。。只是试一试的心态。。居然都16ms过了。。。数据不强。。。。
#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
int prim[10000], p;
bool isprim[10005];
int main() {
int i, j, n, sum,ans;
memset(isprim, 1, sizeof (isprim));
isprim[0] = isprim[1] = p=0;
for (i = 2; i < 10005; i++)
if (isprim[i]){
for (j = i * i; j < 10005; j += i)
isprim[j] = 0;
prim[p++]=i;
}
while(scanf("%d",&n) && n){
for(i=0,ans=0;prim[i]<=n && i<p;i++)
for(j=i,sum=0;prim[j]<=n && j<p;j++){
sum+=prim[j];
if(sum==n){
ans++; break;
}
if(sum>n) break;
}
printf("%d\n",ans);
}
return 0;
}