poj2739(尺取法+质数筛)
题意:给你一个数,问这个数能否等于一系列连续的质数的和;
解题思路:质数筛打出质数表;然后就是尺取法解决;
代码:
#include<iostream> #include<algorithm> #include<cstring> #define maxn 1000005 using namespace std; int visit[maxn];int prime[maxn]; void qprime() { memset(visit,0,sizeof(visit)); int num=0; for(int i=2;i<maxn;i++) { if(!visit[i]) prime[++num]=i; for(int j=1;j<=num&&i*prime[j]<maxn;j++) { visit[i*prime[j]]=1; if(!i%prime[j]) break; } } } int main() { int left=1;int right=1; int n; int sum=0; int count=0; qprime(); while(cin>>n) { if(n==0) return 0; left=right=1;sum=0;count=0; while(1) { while(right<=n&&sum<n) { sum+=prime[right++]; } if(sum<n) break; if(sum==n) { count++; } sum-=prime[left++]; } cout<<count<<endl; } return 0; }