您的位置:首页 > 其它

POJ2739-Sum of Consecutive Prime Numbers

2011-07-28 23:47 363 查看
转载请注明出处:優YoU http://user.qzone.qq.com/289065406/blog/1299063670

提示:本题用一般的素数求法就可以做出来了,虽然可以AC,不过时间复杂度很大,所以我用了优化,优化的过程可以参看下一道水题POJ2262,两道水题基本上是同气连枝

//Memory   Time
//232K     16MS

#include<iostream>
using namespace std;

int prim[1230]={2,3};
int count=0;

void prime(void)    //素数组打表
{

int tally=2;
int i,j,flag;
for(i=5;i<10000;i+=2)
{
for(j=0,flag=1;prim[j]*prim[j]<=i;j++)
if(i%prim[j]==0)flag=0;
if(flag)
{
prim[tally]=i;
tally++;
}
}
return;
}

void minus(int num,int i)            //寻找num的素数组合个数
{
if(i<0)
return;
if(num-prim[i]==0)
count++;
else if(num-prim[i]>0)
minus(num-prim[i],i-1);
else
return;
return;
}

int main(void)
{
prime();
int num,i,k;
for(;;)
{
cin>>num;
if(num==0)return 0;
for(i=0;i<1230;i++)
if(num==prim[i])
{
count++;
k=i-1;
break;
}
else if(num<prim[i])
{
k=i-1;
break;
}
for(i=k;i>=0;i--)
minus(num,i);
cout<<count<<endl;
count=0;
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: