POJ2739-Sum of Consecutive Prime Numbers

转载请注明出处:優YoU http://user.qzone.qq.com/289065406/blog/1299063670

 

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

 

 1 //Memory   Time 
2 //232K 16MS
3
4
5 #include<iostream>
6 using namespace std;
7
8 int prim[1230]={2,3};
9 int count=0;
10
11 void prime(void) //素数组打表
12 {
13
14 int tally=2;
15 int i,j,flag;
16 for(i=5;i<10000;i+=2)
17 {
18 for(j=0,flag=1;prim[j]*prim[j]<=i;j++)
19 if(i%prim[j]==0)flag=0;
20 if(flag)
21 {
22 prim[tally]=i;
23 tally++;
24 }
25 }
26 return;
27 }
28
29 void minus(int num,int i) //寻找num的素数组合个数
30 {
31 if(i<0)
32 return;
33 if(num-prim[i]==0)
34 count++;
35 else if(num-prim[i]>0)
36 minus(num-prim[i],i-1);
37 else
38 return;
39 return;
40 }
41
42 int main(void)
43 {
44 prime();
45 int num,i,k;
46 for(;;)
47 {
48 cin>>num;
49 if(num==0)return 0;
50 for(i=0;i<1230;i++)
51 if(num==prim[i])
52 {
53 count++;
54 k=i-1;
55 break;
56 }
57 else if(num<prim[i])
58 {
59 k=i-1;
60 break;
61 }
62 for(i=k;i>=0;i--)
63 minus(num,i);
64 cout<<count<<endl;
65 count=0;
66 }
67 return 0;
68 }

你可能感兴趣的:(number)