1 条题解
-
0
C :
#include<stdio.h> int prime(int n) { int i; if (n == 2) return 1; if (n % 2 == 0) return 0; for (i = 3; i<n/2; i += 2) { if (n%i == 0) return 0; } return 1; } int main() { int sum, n, i, j, sum_t; while (scanf("%d", &n), n) { sum = 0; if (prime(n)) sum++; for (i = 1; i<n;) { while (i++) if (prime(i)) break; sum_t = 0; for (j = i; j<n; ++j) { if (prime(j)) sum_t += j; if (sum_t == n) { sum++; break; } if (sum_t>n) break; } } printf("%d\n", sum); } return 0; }
C++ :
#include <iostream> #include <cmath> #include <string.h> using namespace std; int n, prime[10001], ans[10001], k; int main(){ prime[0] = 0; prime[1] = 2; prime[2] = 3; k = 3; for (int i = 5; i <= 10000; i += 2){ int j, s = sqrt(double(i)); for (j = 3; j <= s; j++) if (i % j == 0) break; if (j > s) prime[k++] = i; } for (int i = 1; i < k; i++) prime[i] += prime[i - 1]; memset(ans, 0, sizeof(ans)); for (int i = 0; i < k; i++) for (int j = i + 1; j < k; j++){ int temp = prime[j] - prime[i]; if (temp > 10000) break; ans[temp]++; } while(cin>>n, n) cout<<ans[n]<<endl; return 0; }
- 1
信息
- ID
- 3573
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- (无)
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者