http://poj.org/problem?id=2739
将整数n分解为连续素数之和,有多少种分法?
艾氏筛法做一份素数表,然后在表上爬行一遍。
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <queue>
#include <algorithm>
using namespace std;
int n;
vector <int> prime;
bool is[100005];
int ans;
void init(){
memset(is,1,sizeof(is));
is[0]=is[1]=false;
for (int i=2;i<100005;i++){
if (is[i]){
prime.push_back(i);
for (int j=i*2;j<=100005;j+=i){
is[j]=false;
}
}
}
}
int main(){
init();
int size=prime.size();
while (cin >> n && n){
int l=0,r=0,sum=0,ans=0;
while (1){
while (sum<n&&r<size){
sum+=prime[r++];
}
if (sum<n){
break;
}
else
if (sum==n){
ans++;
}
sum-=prime[l++];
}
cout << ans << endl;
}
}