UVA - 1210 - Sum of Consecutive Prime Numbers

找到上限,直接暴力枚举即可

 

 

 1 #include<cstdio>  
 2 #include<cstring>  
 3 #include<cctype>  
 4 #include<cstdlib>  
 5 #include<cmath>  
 6 #include<iostream>  
 7 #include<sstream>  
 8 #include<iterator>  
 9 #include<algorithm>  
10 #include<string>  
11 #include<vector>  
12 #include<set>  
13 #include<map>  
14 #include<queue>  
15 #include<stack>  
16 #include<list>  
17 #include<ctime>  
18 #define Memset(x) memset(x, 0, sizeof(x))  
19 #define all(x) x.begin(), x.end()  
20 const int E = 10000 + 10;  
21 const double EPS = 1e-6;  
22 using namespace std;  
23   
24 vector<int> prime;  
25 int pri[E];  
26   
27 void dabiao(){  
28     pri[0] = 1, pri[1] = 1, pri[2] = 0;  
29     for(int i = 2; i < E; i++)  
30         if(!pri[i]){  
31             prime.push_back(i);  
32             for(int j = i * 2; j < E; j += i)  
33                 pri[j] = 1;  
34         }  
35 }  
36   
37 int main(){  
38     Memset(pri);  
39     dabiao();  
40     int n;  
41     while(scanf("%d", &n) == 1 && n){  
42         int sum = 0, len = upper_bound(all(prime), n) - prime.begin();  
43         for(int i = len - 1; i >= 0; i--){  
44             int temp = 0;  
45             for(int j = i; j >= 0; j--){  
46                 if(temp + prime[j] > n)  break;  
47                 temp += prime[j];  
48             }  
49             if(temp == n)  sum++;  
50         }  
51         printf("%d\n", sum);  
52     }  
53     return 0;  
54 }  

 

posted @ 2016-10-25 10:42  TianTengtt  阅读(118)  评论(0)    收藏  举报