http://poj.org/problem?id=2739
#include <stdio.h>
int plist[10000],pcount=0;
int prime(int n){
int i;
if ((n!=2&&!(n%2))||(n!=3&&!(n%3))||(n!=5&&!(n%5))||(n!=7&&!(n%7)))
return 0;
for (i=0;plist[i]*plist[i]<=n;i++)
if (!(n%plist[i]))
return 0;
return n>1;
}
void initprime(){
int i;
for (plist[pcount++]=2,i=3;i<11000;i++)
if (prime(i))
plist[pcount++]=i;
}
int fun(int begin, int n){
int sum=0,i;
for (i=begin; sum<n ;i++) sum+=plist[i];
if (sum==n) return 1;
else return 0;
}
int main(){
int n,count,i;
initprime();
while (scanf("%d",&n),n!=0){
for (i=0,count=0;plist[i]<=n;i++){
if (fun(i,n)) count++;
}
printf("%d\n",count);
}
return 0;
}