【题意简述】:题意很简单,就是用连续的素数加和,计算有多少个这样的连续的素数数列可以使这个序列的和等于输入的数。
【分析】:很经典的素数模板,基本所有有关素数的题,我都会使用这个模板。
// 268K 16Ms
#include<iostream>
using namespace std;
#define N 10000
bool isprime[N];
long long prime[1300],nprime; // 注意long long
void doprime()
{
long long i,j; // !!注意
nprime = 1;
memset(isprime,true,sizeof(isprime));
isprime[1] = 0;
for(i = 2;i<=N;i++)
{
if(isprime[i])
{
prime[nprime++] = i;
for(j = i*i;j<=N;j+=i)
{
isprime[j] = false;
}
}
}
}
int main()
{
int a,i,j;
int sum,count;
doprime();
while(cin>>a)
{
count = 0;
if(a == 0) break;
for(i = 1;i<=1300;i++)
{
sum = 0;
for(j = i;j<=1300;j++)
{
sum+=prime[j];
if(sum == a)
count++;
if(sum > a)
break;
}
}
cout<<count<<endl;
}
return 0;
}