Greedy:Sum of Consecutive Prime Numbers(POJ 2739)

                

                  素数之和

  题目大意:一些整数可以表示成一个连续素数之和,给定一个整数要你找出可以表示这一个整数的连续整数序列的个数

  方法:打表,然后用游标卡尺法即可

  

#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;
    }
}

  

原文地址:https://www.cnblogs.com/Philip-Tell-Truth/p/5155026.html