习题10-5 连续素数之和 uva 1210

来源:互联网 发布:嵌入式linux开机进度 编辑:程序博客网 时间:2024/06/07 18:15

题目:点击打开链接

题意:输入n(2<=n<=10000),有多少种方案可以把n写成若干个连续素数之和?例如,41可以有2+3+5+7+11,11+13+17,41三种方案。

先筛选素数表,然后暴力枚举。。。

#include<bits/stdc++.h> using namespace std;const int maxn=100005;vector<int> primes;int vis[maxn];void init(){int m=sqrt(maxn+0.5);for(int i=2;i<=m;i++)if(!vis[i])for(int j=i*i;j<=maxn;j+=i)vis[j]=1;for(int i=2;i<=maxn;i++)if(!vis[i]) primes.push_back(i);}int main() { init();int n;while(cin>>n,n){int ans=0;int sum=0;for(int i=0;i<primes.size();i++){if(primes[i]>n) break;sum=0;for(int j=i;j<primes.size();j++){sum+=primes[j];if(sum>n) break;if(sum==n){++ans;break;}}}cout<<ans<<endl;}    return 0;}


原创粉丝点击