关闭

习题10-6 UVA - 1210 Sum of Consecutive Prime Numbers 连续素数之和(滑动窗口)

标签: c语言uva
424人阅读 评论(0) 收藏 举报
分类:

大体题意:

给你一个整数n(n <= 10000),有多少种方案可以把n 写成若干个连续素数之和?

思路:

直接素数打表,然后滑动窗口即可!

当sum 小于目标时,移动右边r。

发现达到目标,直接记录答案。

当sum 大于目标时,直接减左边的l

最后输出ans 即可!

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
const int maxn = 100000 + 10;
int vis[maxn];
int prime[maxn],n,cnt;
void init(){
    int m = sqrt(maxn + 0.5);
    for (int i = 2; i <= m; ++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])prime[cnt++] = i;
//    for (int i = 0; i < 100; ++i)printf("%d\n",prime[i]);
}
int solve(){
    int l =0,r = 0;
    int sum = 0;
    int ans = 0;
    while(1){
        while(sum < n && prime[r] <=n){
            sum += prime[r++];
        }
        if (l > r)return ans;
        if (sum < n)return ans;
        if (sum == n){
            ++ans;
//            printf("%d %d\n",l,r);
            sum -= prime[l++];
        }
        while(sum > n){
            sum -= prime[l++];
        }
        if (sum > n)return ans;
    }
}
int main(){
    init();
    while(scanf("%d",&n) == 1 && n)
        printf("%d\n",solve());
    return 0;
}


0
0
查看评论

【UVA】1210 - Sum of Consecutive Prime Numbers

普通的求区间连续和的问题,一开始因为是区间移动,但是怕UVA数据太严,直接打表,后来发现自己的担心是多余的。 14044972 1210 Sum of Consecutive Prime Numbers Accepted C++ 0.049 2014-08-15 10:30:1...
  • u013451221
  • u013451221
  • 2014-08-15 18:29
  • 977

UVA 1210 Sum of Consecutive Prime Numbers(数论)

UVA - 1210 Sum of Consecutive Prime Numbers Time Limit: 3000MS   Memory Limit: Unknown   64bit IO Format: %ll...
  • u013268685
  • u013268685
  • 2015-05-07 01:26
  • 1249

UVa 1210 - Sum of Consecutive Prime Numbers(素数+连续和)

求所给的数能用多少种连续素数的和表示。 类似于求最大连续和优化的方法。使用前缀和减少运算。然后输入范围是2到10000,貌似可以打表交。
  • wcr1996
  • wcr1996
  • 2015-02-15 17:03
  • 1346

UVa1210 - Sum of Consecutive Prime Numbers

#include const int maxn=10010; int isp[1250],pre_p,sum[1250]; bool np[maxn]={true,true}; void prepare(){ for(int i=2;i<maxn;++i){ if(!n...
  • a197p
  • a197p
  • 2015-03-28 23:55
  • 401

Sum of Consecutive Prime Numbers UVA - 1210 连续素数之和

紫书p343 素数打表,再求前缀和,最后通过两重循环,通过前缀和快速求出区间值,找到满足的数就答案+1 #include #include #include #include #include #include #include #include #include #inclu...
  • zmh69695328
  • zmh69695328
  • 2017-07-20 18:04
  • 68

UVa 1210 - Sum of Consecutive Prime Numbers(滑动窗口)

大致题意:给定一个N, 求连续素数和等于N的
  • u014435976
  • u014435976
  • 2014-08-15 09:27
  • 658

poj2739 Sum of Consecutive Prime Numbers (素数打表)

D - Sum of Consecutive Prime Numbers Crawling in process... Crawling failed Time Limit:1000MS     Memory Limit:65536KB &#...
  • su20145104009
  • su20145104009
  • 2016-05-10 09:02
  • 1662

UVA 1210(p343)----Sum of Consecutive Prime Numbers

#include #include #include using namespace std; const int maxn=10000; int num,u[maxn+50],prime[maxn+50]; int a[6000000],sum[maxn]; void get() { nu...
  • wang2147483647
  • wang2147483647
  • 2016-02-25 23:36
  • 184

1210 - Sum of Consecutive Prime Numbers

紫书上习题10-6; #include #include #include using namespace std; int p=0; int vis[10010]; int a[10010]; int sushu() { memset(vis,0,10010); for(i...
  • qq_38158040
  • qq_38158040
  • 2017-04-21 20:49
  • 106

UVA - 1210 - Sum of Consecutive Prime Numbers

找到上限,直接暴力枚举即可 #include #include #include #include #include #include #include #include #include #include #include #include #include #include #incl...
  • TianTengtt
  • TianTengtt
  • 2016-06-12 16:50
  • 339
    个人资料
    • 访问:196282次
    • 积分:7764
    • 等级:
    • 排名:第3247名
    • 原创:602篇
    • 转载:2篇
    • 译文:0篇
    • 评论:36条
    文章分类
    最新评论