poj 2739(埃氏筛法加尺取法)

来源:互联网 发布:wifi网络唤醒 编辑:程序博客网 时间:2024/06/11 02:34

可以直接暴力做

技巧的话就是埃氏筛法加尺取法

代码如下

#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);} }