poj 2739 Sum of Consecutive Prime Numbers

#include<cstdio>
#include<iostream>
#include<stdlib.h>
#include<ctype.h>
#include<algorithm>
#include<cmath>
#include<cstring>
#include<queue>
#include<iomanip>
#include<set>
#include<string>
#include<iterator>
#define maxn 100000
using namespace std;
int p[maxn];
int q[maxn];
int ans;
int sn;

void prime(){
     p[0]=p[1]=0;
     sn=0;
     for(int i=2;i<maxn;i++)
       p[i]=1;
     for(int i=2;i<maxn;i++)
        if(p[i]){
         q[sn++]=i;
         for(int j=i+i;j<maxn;j+=i)
           p[j]=0;
        }

}
void work(int n,int k){
    if(k<0)
     return;
    if(n-q[k]==0){

      ans++;
    }
    else if(n-q[k]>0){

       work(n-q[k],k-1);

    }
    else
     return;
    return ;

}
int main(){
   int n;

   while(cin>>n,n){

       prime();
       ans=0;
       int k;
      for(int i=0;i<1330;i++)
        if(n==q[i]){
          k=i-1;
          ans++;
          break;
        }
        else if(n<q[i]){
           k=i-1;
           break;

        }
      for(int i=k;i>=0;i--)
        work(n,i);
        cout<<ans<<endl;

   }





}

你可能感兴趣的:(深搜)