题意:问一个数字能被多少种连续的质数相加得到。
解法:一开始没看见是连续的……SB了半天……后来打了个表……就这样吧
代码:
#include<stdio.h> #include<iostream> #include<algorithm> #include<string> #include<string.h> #include<math.h> #include<limits.h> #include<time.h> #include<stdlib.h> #include<map> #include<queue> #include<set> #include<stack> #include<vector> #define LL long long using namespace std; int ans[10010] = {0}; int sum[5000] = {0}; void init() { bool isprime[10010] = {0}; int cnt = 1; for(int i = 2; i <= 10000; i++) { if(!isprime[i]) { sum[cnt] = sum[cnt - 1] + i; for(int j = 0; j < cnt; j++) if(sum[cnt] - sum[j] <= 10000) ans[sum[cnt] - sum[j]]++; cnt++; for(int j = i + i; j <= 10000; j += i) isprime[j] = 1; } } } int main() { init(); int n; while(~scanf("%d", &n) && n) { printf("%d\n", ans[n]); } return 0; }
时间: 2024-10-11 07:20:49