1. 程式人生 > >poj2739(尺取法+質數篩)

poj2739(尺取法+質數篩)

n) return += sizeof log 代碼 sin space i++

題意:給你一個數,問這個數能否等於一系列連續的質數的和;

解題思路:質數篩打出質數表;然後就是尺取法解決;

代碼:

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

poj2739(尺取法+質數篩)