题意:给你一个数,问这个数能否等于一系列连续的质数的和;
解题思路:质数筛打出质数表;然后就是尺取法解决;
代码:
#include<iostream>
#include<algorithm>
#include<cstring>
#define maxn 1000005
using namespace std;
int visit[maxn];int prime[maxn];
void qprime()
{
memset(visit,,sizeof(visit));
int num=;
for(int i=;i<maxn;i++)
{
if(!visit[i])
prime[++num]=i;
for(int j=;j<=num&&i*prime[j]<maxn;j++)
{
visit[i*prime[j]]=;
if(!i%prime[j])
break;
}
}
}
int main()
{
int left=;int right=;
int n;
int sum=;
int count=;
qprime();
while(cin>>n)
{
if(n==)
return ;
left=right=;sum=;count=;
while()
{
while(right<=n&&sum<n)
{
sum+=prime[right++];
}
if(sum<n)
break;
if(sum==n)
{
count++;
}
sum-=prime[left++];
}
cout<<count<<endl;
}
return ;
}