尺取法 || POJ 2739 Sum of Consecutive Prime Numbers

Posted 舒羽倾

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了尺取法 || POJ 2739 Sum of Consecutive Prime Numbers相关的知识,希望对你有一定的参考价值。

给一个数 写成连续质数的和的形式,能写出多少种
*解法:先筛质数 然后尺取法
**尺取法:固定区间左、右端点为0,如果区间和比目标值大则右移左端点,比目标值小则右移右端点
#include <iostream>
#include <cstdio>
using namespace std;
#define SZ 11000
bool isprime[SZ];
int prime[SZ], num[SZ];
int cnt;
void prim(int n)
{
    memset(isprime, 1, sizeof(isprime));//1->是素数,0->不是素数
    memset(prime, 0, sizeof(prime));
    isprime[0] = 0;
    isprime[1] = 0;
    cnt = 1;
    for(int i = 2; i <= n; i++)
    {
        if(isprime[i]) prime[cnt++] = i;
        for(int j = 1; j <= cnt && i * prime[j] <= n; j++)
        {
            isprime[i * prime[j]] = 0;
            if(i % prime[j] == 0) break;
        }
    }
    return;
}
int main()
{
    while(1)
    {
        int n;
        scanf("%d", &n);
        if(n == 0) break;
        prim(n);
        num[0] = 0;
        for(int i = 1; i < cnt; i++)
            num[i] = num[i - 1] + prime[i];
        int l = 1, r = 1, ans = 0;
        while(r < cnt)
        {
            if(num[r] - num[l - 1] < n) r++;
            else if(num[r] - num[l - 1] > n) l++;
            else if(num[r] - num[l - 1] == n) ans++, l++, r++;
        }
        printf("%d\n", ans);
    }
    return 0;
}

 

以上是关于尺取法 || POJ 2739 Sum of Consecutive Prime Numbers的主要内容,如果未能解决你的问题,请参考以下文章

POJ2739(尺取法)

poj2739尺取法+素数筛

poj2739(尺取法+质数筛)

尺取法好题POJ2566-Bound Found

Sum of Consecutive Prime Numbers(poj2739)

[POJ] 2739 Sum of Consecutive Prime Numbers