UVA1210Sum of Consecutive Prime Numbers(素数打表 + 连续和)

题目链接

题意:输入一个数n (2 <= n <= 10000) 有多少种方案可以把n写成若干个连续素数之和

打出10000之内的素数表,然后再打出每个可能得到的和的方案数的表

 1 #include <iostream>
 2 #include <cstring>
 3 #include <algorithm>
 4 #include <cstdio>
 5 using namespace std;
 6 const int Max = 10000;
 7 int prime[Max + 5],total,flag[Max + 5];
 8 int dp[6000000];  //可以求出10000所有素数和为5000000多
 9 void get_prime()
10 {
11     memset(flag, 0, sizeof(flag));
12     total = 0;
13     for(int i = 2; i <= Max; i++)
14     {
15         if(flag[i] == 0)
16         {
17             prime[ ++total ] = i;
18             for(int j = i; j <= Max / i; j++)
19                 flag[i * j] = 1;
20         }
21     }
22 }
23 void init()
24 {
25     memset(dp, 0, sizeof(dp));
26     int ans;
27     for(int i = 1; i <= total; i++)
28     {
29         ans = 0;
30         for(int j = i; j <= total; j++)  //第i个为起点,第j个为终点的素数段
31         {
32             ans += prime[j];
33             dp[ans]++;
34         }
35     }
36 }
37 int main()
38 {
39     get_prime();
40     init();
41     int n;
42     while(scanf("%d", &n) != EOF && n)
43     {
44         printf("%d\n", dp[n]);
45     }
46     return 0;
47 }
View Code

 

转载于:https://www.cnblogs.com/zhaopAC/p/5224466.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值