/************************************************************************/ |2739 Accepted 192K 47MS C++ 1017B 2011-06-09 22:42:10 |题意: 输入一个正整数, 求这个整数的连续素数之和等于这个数,求这样连续数的个数 | 思路: 先把1-10000 内的素数筛出来, 然后直接枚举即可 /************************************************************************/ #include<iostream> #include<cmath> using namespace std; const int maxn = 10001; bool isprime[maxn]; int prime[1300]; int getprime(int n) { int i, j, k = 0; memset(isprime, true, sizeof(isprime)); int s, e = (int)(sqrt(1.000*n)+1); isprime[0] = isprime[1] = false; prime[k++] = 2; for(i=4; i<=n; i+=2) isprime[i] = false; for(i=3; i<=n; i++) { if(isprime[i]) { prime[k++] = i; for(s=2*i, j=i*i; j<=n; j+=s) isprime[j] = false; } } for(i; i<=n; i++) { if(isprime[i]) prime[k++] = i; } return k; } int solve(int n, int k) { int cursum = 0, cnt = 0; int i = 0; while(n >= prime[i]) { cursum = 0; for(int j=i; j<k; j++) { cursum += prime[j]; if(cursum==n) { cnt++; break; } if(prime[j] > n) break; } i += 1; } return cnt ; } int main() { int k = getprime(maxn); int n; while(scanf("%d", &n)!=EOF) { if(n==0) break; int ret = solve(n, k); printf("%d/n", ret); } return 0; }