码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2018-02-03 19:56:56      阅读:169      评论:0      收藏:0      [点我收藏+]

标签:个数   span   post   memset   i++   isp   cst   cut   def   

给一个数 写成连续质数的和的形式,能写出多少种
*解法:先筛质数 然后尺取法
**尺取法:固定区间左、右端点为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

标签:个数   span   post   memset   i++   isp   cst   cut   def   

原文地址:https://www.cnblogs.com/pinkglightning/p/8410416.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!