poj2739(尺取法+质数筛)

题意:给你一个数,问这个数能否等于一系列连续的质数的和;

解题思路:质数筛打出质数表;然后就是尺取法解决;

代码:

#include<iostream>
#include<algorithm>
#include<cstring>
#define maxn 1000005
using namespace std;
int visit[maxn];int prime[maxn];
void qprime()
{
    memset(visit,0,sizeof(visit));
    int num=0;
    for(int i=2;i<maxn;i++)
    {
        if(!visit[i])
            prime[++num]=i;
        for(int j=1;j<=num&&i*prime[j]<maxn;j++)
        {
            visit[i*prime[j]]=1;
            if(!i%prime[j])
                break;
        }
    }
}
int main()
{
    int left=1;int right=1;
    int n;
    int sum=0;
    int count=0;
    qprime();
    while(cin>>n)
    {
        if(n==0)
            return 0;
        left=right=1;sum=0;count=0;
        while(1)
        {
            while(right<=n&&sum<n)
            {
                sum+=prime[right++];
            }
            if(sum<n)
                break;
            if(sum==n)
            {
                count++;
            }
            sum-=prime[left++];
        }
        cout<<count<<endl;
    }
    return 0;
}

原文地址:https://www.cnblogs.com/huangdao/p/8329017.html

时间: 2024-11-05 21:59:04

poj2739(尺取法+质数筛)的相关文章

poj2739尺取法+素数筛

Some positive integers can be represented by a sum of one or more consecutive prime numbers. How many such representations does a given positive integer have? For example, the integer 53 has two representations 5 + 7 + 11 + 13 + 17 and 53. The intege

POJ2739(尺取法)

Sum of Consecutive Prime Numbers Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 23931   Accepted: 13044 Description Some positive integers can be represented by a sum of one or more consecutive prime numbers. How many such representatio

尺取法 TwoPoint

就是两个指针表示区间[l,r]的开始与结束然后根据题目来将端点移动,是一种十分有效的做法.适合连续区间的问题 3320 这道意思是一本书有n页,每一页上有一个知识点标号a[i]可能重复,要求选择一个最小的区间使得能够覆盖所有知识点 分析:[l,r]区间推进,统计区间中能够覆盖的知识点数,对于每一个l,r都是满足可以覆盖所有知识点的最小r,处理好区间知识点数的统计就好了 1 #include <iostream> 2 #include <cstdio> 3 #include <

poj_2739 尺取法

题目大意 给定一个数字N,N可能由1个或多个连续的素数求和得到,比如41 = 2+3+5+7+11+13, 41 = 11+13+17, 41 = 41.求出对于N,所有可能的组合形式. 题目分析 先求出所有可能构成加数的素数,使用埃氏筛选法.然后求出所有的可能形式,由于所选择的是一个连续的区间,可以使用一个头指针,一个尾指针,区间选择为头尾指针内部的区域,通过头尾指针的移动来更改区间.即尺取法.     尾部保持不动,不断增加头部,并加上头部数据,记录区间内的和,若恰好等于n,则计数加1,若大

2019 ICPC上海网络赛 G. Substring 哈希+尺取法+unordered_map

题目链接:https://nanti.jisuanke.com/t/41415 赛后补题. 参考博客:https://blog.csdn.net/bjfu170203101/article/details/100889468 题意:给出一个主串(假设长度为m),再给出n个模式串,对于每一个模式串,如果在主串中有一个子串,它的第一个字符和最后一个字符分别与这个模式串的开头字符和结尾字符相同,并且每一种字符出现的次数相同,那么就把这个模式串和这个子串看成是相同的,认为模式串在主串中出现过一次,比如模

luogu 1712 区间(线段树+尺取法)

题意:给出n个区间,求选择一些区间,使得一个点被覆盖的次数超过m次,最小的花费.花费指的是选择的区间中最大长度减去最小长度. 坐标值这么大,n比较小,显然需要离散化,需要一个技巧,把区间转化为半开半闭区间,然后线段树的每一个节点表示一个半开半闭区间. 接着我们注意到需要求最小的花费,且这个花费只与选择的区间集合中的最大长度和最小长度有关. 这意味着如果最大长度和最小长度一定,我们显然是需要把中间长度的区间尽量的选择进去使答案不会变的更劣. 不妨把区间按长度排序,枚举每个最小长度区间,然后最大区间

poj 3320 Jessica&#39;s Reading Problem(尺取法+map/hash)

题目:http://poj.org/problem?id=3320 题意:给定N个元素的数组,找出最短的一段区间使得区间里面的元素种类等于整个数组的元素种类. 分析:暴力枚举区间的起点x,然后找到最小的y,使得区间[x,y]满足条件,x向有移位后变成x',现在的y'肯定不至于在y的左边.存状态的话map和hash都可以. map代码: #include <iostream> #include <set> #include <map> #include <cstdi

hihocoder-1483区间价值 (二分+尺取法)

题目链接: 区间价值 给定n个数A1...An,小Ho想了解AL..AR中有多少对元素值相同.小Ho把这个数目定义为区间[L,R]的价值,用v[L,R]表示. 例如1 1 1 2 2这五个数所组成的区间的价值为4. 现在小Ho想知道在所有的的v[L,R](1 <= L <= R <= n)中,第k小的值是多少. Input 第一行一个数T(T<=10),表示数据组数. 对于每一组数据: 第一行两个数n,k(1<=n<=200,000,1<=k<=n*(n+1

【转】毛虫算法&mdash;&mdash;尺取法

转自http://www.myexception.cn/program/1839999.html 妹子满分~~~~ 毛毛虫算法--尺取法 有这么一类问题,需要在给的一组数据中找到不大于某一个上限的"最优连续子序列" 于是就有了这样一种方法,找这个子序列的过程很像毛毛虫爬行方式,我管它叫毛毛虫算法,比较流行的叫法是"尺取法". 喏,就像图里的妹纸一样~ 还是举个栗子: Poj3061 给长度为n的数组和一个整数m,求总和不小于m的连续子序列的最小长度 输入 n = 1