1257:Sum of Consecutive prime Numbers
問題文
http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=1257
連続する素数の和でnを作る場合の数を求めよ。
素数の数が1000くらいしかなかったので尺取り法した。
#include<iostream> #include<vector> #include<algorithm> using namespace std; int main(void){ bool prim[10001]; fill(prim,prim+10001,true); for(int i=2;i*i<10001;i++){ if(prim[i]){ for(int j=i*2;j<10001;j+=i){ prim[j]=false; } } } vector<int>p; for(int i=2;i<10001;i++) if(prim[i])p.push_back(i); int n; while(cin >> n,n){ int ans=0,sum=0; for(int i=0,j=0;j<p.size();){ while(sum>n)sum-=p[i++]; while(sum<n)sum+=p[j++]; if(sum==n)ans++,sum+=p[j++]; } cout << ans << endl; } return 0; }