poj2739(尺取法+質數篩)
阿新 • • 發佈:2018-01-22
n) return += sizeof log 代碼 sin space i++
題意:給你一個數,問這個數能否等於一系列連續的質數的和;
解題思路:質數篩打出質數表;然後就是尺取法解決;
代碼:
#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; }
poj2739(尺取法+質數篩)