题目大意:一些整数可以表示成一个连续素数之和,给定一个整数要你找出可以表示这一个整数的连续整数序列的个数
方法:打表,然后用游标卡尺法即可
#include <iostream> #include <functional> #include <algorithm> #define MAX_N 10010 using namespace std; static int primes_set[MAX_N], flag[MAX_N], p_sum; void inivilize(void); void solve(const int); int main(void) { inivilize(); int n; while (~scanf("%d", &n)) { if (n == 0) break; solve(n); } return EXIT_SUCCESS; } void solve(const int n) { int s, t, sum, ans = 0; s = t = sum = 0; while (1) { while (primes_set[t] <= n && sum < n) sum += primes_set[t++]; if (sum == n) ans++; if (sum < n) break; sum -= primes_set[s++]; } printf("%d ", ans); } void inivilize(void) { int i = 2, j; memset(flag, 0, sizeof(flag)); for (; i < MAX_N; i++) { if (!flag[i]) primes_set[p_sum++] = i; for (j = 0; j < p_sum && primes_set[j] * i < MAX_N; j++) flag[primes_set[j] * i] = 1; } }