您的位置:首页 > 其它

uva 1210

2015-06-02 11:36 232 查看
#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
<< endl;

}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: