标签:des style class blog c code
Time Limit: 1000MS | Memory Limit: 65536K | |
Total Submissions: 18427 | Accepted: 10122 |
Description
Input
Output
Sample Input
2 3 17 41 20 666 12 53 0
Sample Output
1 1 2 3 0 0 1 2
Source
//memory:744K time:0MS
#include <iostream> #include<cmath> #include<cstring> using namespace std; const int MAXN = 10001; int main() { bool vis[MAXN]; int isprime[MAXN],k=0; memset(vis,0,sizeof(vis)); for(int i=2;i<(int)sqrt((double)MAXN);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]) isprime[k++]=i; } int n; while(cin>>n) { if(n==0) break; //因为不一定是从头开始,所以需要两层循环, //每一个i都需要从i开始往后累加 int num=0; for(int i=0;isprime[i]<=n;i++) //isprime循环 { int ans = 0; //累加器 for(int j=i ; j<k&& ans<n ; j++) //从每一个i开始往后循环 { ans += isprime[j]; } if(ans==n) num++; } cout<<num<<endl; } return 0; }
以下给出一个较好的代码,挑选素数的想法很好,素数只能被素数整除,不会被偶数整除。但是这种方法很明显慢一些
//memory :736K time :32MS
#include<iostream> using namespace std; const int MAXN = 10001; int prime[MAXN],prime_num = 0; bool isprime(int n) { for(int i=0;i<prime_num;i++) { if(n%prime[i]==0) return false; } return true; } int main() { int n; for(int i=2;i<MAXN;i++) { if(isprime(i)) { prime[prime_num++]=i; } } while(cin>>n) { if(n==0) break; int num=0; for(int i=0;prime[i]<=n;i++) { int ans = 0; for(int j=i;j<prime_num&&ans<n;j++) { ans += prime[j]; } if(ans == n) num++; } cout<<num<<endl; } return 0; }
标签:des style class blog c code
原文地址:http://www.cnblogs.com/jhldreams/p/3748425.html