#include <iostream>
using namespace std;
const int maxp=2000,n=10000;
int prime[maxp],total=0;
bool isprime(int k)//bool函数用来求素数
{
for(int i=0;i<total;i++)
if(k%prime[i]==0)//判断素数的一种方法(用这个数对数组当中所有的 素数 进行取余;
return false;
return true;
}
int main()
{
for(int i=2;i<n;i++)
if(isprime(i))
prime[total++]=i;//total++是先用后加。此处之前的代码是把2~n之间的素数全部都存储到prime[total]数组中。
prime[total]=n+1;
int m;
cin>>m;
while(m)
{
int ans=0;//用于计算个数
for(int i=0;prime[i]<=m;i++)//外层循环用来枚举所有的可能性
{
int cnt=0;//求和
for(int j=i;j<total,cnt<m;j++)//内循环用来判断所求和的大小是否符合
cnt+=prime[j];
if(cnt==m)
++ans;
}
cout<<ans<<endl;
cin>>m;
}
return 0;
}
#include <iostream>
#include <stdlib.h>
#include <cstring>
#include <iomanip>
using namespace std;
const int maxn = 10000;
int prime[maxn+1];
void getPrime(){
memset(prime,0,sizeof(prime));
for(int i=2; i<=maxn;++i){
if(!prime[i]) prime[++prime[0]] = i;
for(int j= 1; j<=prime[0] && i*prime[j]<=maxn;++j){
prime[i*prime[j]] = 1 ;
if(i%prime[j] == 0)
break;
}
}
}
int main(){
int m;
getPrime();
while(cin>>m,m){
int cnt = 0;
for(int i=1; prime[i]<=m;++i){
int ans = 0;
for(int j= i ;j<=prime[0]&&ans<m ;++j){//for(int j= i ;j<=prime[0], ans<m ;++j)
ans += prime[j];
if(ans == m){
cnt++;
}
}
}
cout<<cnt<<endl;
}
return 0;
}
// 2020.3.29更