可以直接暴力做
技巧的话就是埃氏筛法加尺取法
代码如下
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
int main()
{
int p=0;
bool is_prime[10005];
int prime[10005];
memset(prime,0,sizeof(prime));
for(int i=0;i<10000;i++) is_prime[i]=true;
is_prime[0]=false; is_prime[1]=false;
for(int i=2;i<=10000;i++)
{
if(is_prime[i])
{
prime[p++]=i;
for(int j=2*i;j<=10000;j+=i) is_prime[j]=false;
}
}
int n;
while(scanf("%d",&n)&&n!=0)
{
int num=0;
int s=0,t=0,sum=0;
for(;;)
{
while(t<p&&sum<n){
sum+=prime[t++];
}
if(sum<n) break;
else if(sum==n) num++;
sum-=prime[s++];
}
printf("%d\n",num);
}
}