#include<iostream> #include<cstring> using namespace std; const int MAXN = 10000 + 10; bool notprime[MAXN];//值为false表示素数,值为true表示非素数 int s[MAXN]; int c[100000000]; void init() { memset(notprime,false,sizeof(notprime)); notprime[0]=notprime[1]=true; for(int i=2;i<MAXN;i++) if(!notprime[i]) { if(i>MAXN/i)continue;//防止后面i*i溢出(或者i,j用long long) //直接从i*i开始就可以,小于i倍的已经筛选过了,注意是j+=i for(int j=i*i;j<MAXN;j+=i) notprime[j]=true; } } void slove () { init(); int iNum = 0; memset(s,0,sizeof(s)); memset(c,0,sizeof(c)); for (int i = 2;i<MAXN;i++) { if (!notprime[i]) { s[iNum+1] = s[iNum] + i; iNum++; } } for (int i = 0;i<iNum;i++) { for (int j = i + 1;j<iNum;j++) { int sum = s[j] - s[i]; c[sum]++; } } } int main() { int n; slove(); while (cin >> n&&n) { cout << c[n] << endl; } return 0; }