uva 1210

时间:2023-03-08 22:13:43
#include<iostream>
#include<cstring> using namespace std; const int MAXN = + ;
bool notprime[MAXN];//值为false表示素数,值为true表示非素数
int s[MAXN];
int c[];
void init()
{
memset(notprime,false,sizeof(notprime));
notprime[]=notprime[]=true;
for(int i=;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 = ;
memset(s,,sizeof(s));
memset(c,,sizeof(c));
for (int i = ;i<MAXN;i++)
{
if (!notprime[i])
{
s[iNum+] = s[iNum] + i;
iNum++;
}
}
for (int i = ;i<iNum;i++)
{
for (int j = i + ;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 ;
}