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 }