Description

Some positive integers can be represented by a sum of one or more consecutive prime numbers. How many such representations does a given positive integer have? For example, the integer 53 has two representations 5 + 7 + 11 + 13 + 17 and 53. The integer 41 has three representations 2+3+5+7+11+13, 11+13+17, and 41. The integer 3 has only one representation, which is 3. The integer 20 has no such representations. Note that summands must be consecutive prime 
numbers, so neither 7 + 13 nor 3 + 5 + 5 + 7 is a valid representation for the integer 20. 
Your mission is to write a program that reports the number of representations for the given positive integer.

Input

The input is a sequence of positive integers each in a separate line. The integers are between 2 and 10 000, inclusive. The end of the input is indicated by a zero.

Output

The output should be composed of lines each corresponding to an input line except the last zero. An output line includes the number of representations for the input integer as the sum of one or more consecutive prime numbers. No other characters should be inserted in the output.

Sample Input

2
3
17
41
20
666
12
53
0

Sample Output

1
1
2
3
0
0
1
2 题目意思:给你一个数问你这个数可以有多少种方案的连续素数来组成,输出方案数。 解题思路:素数打表与尺取的组合应用。

https://www.cnblogs.com/wkfvawl/p/9092546.html

开始以为应该时间超不了限,暴力了一发,果然还真是出问题了

 #include<stdio.h>
#include<string.h>
#define MAX 10010
long long s[MAX],isprime[MAX];
void prime()///素数打表
{
long long i,k,j;
k=;
memset(isprime,,sizeof(isprime));///初始化都认为是素数
isprime[]=;
isprime[]=;///0和1不是素数
for(i=; i<=MAX; i++)
{
if(isprime[i])
{
s[k++]=i;///保存素数
}
for(j=i*; j<=MAX; j+=i)
{
isprime[j]=;///素数的倍数都不是素数
}
}
}
int main()
{
int n,i,j,count,sum;
prime();
while(scanf("%d",&n)!=EOF)
{
if(n==)
{
break;
}
count=;
for(i=; i<; i++)
{
sum=;
for(j=i; j<; j++)
{
sum=sum+s[j];
if(sum==n)
{
count++;
break;
}
else if(sum>n)
{
break;
}
}
}
printf("%d\n",count);
}
return ;
}

这是正确的尺取法的答案

 1 #include<stdio.h>
2 #include<string.h>
3 #define MAX 10010
4 long long s[MAX],isprime[MAX];
5 void prime()///素数打表
6 {
7 long long i,k,j;
8 k=1;
9 memset(isprime,1,sizeof(isprime));///初始化都认为是素数
10 isprime[0]=0;
11 isprime[1]=0;///0和1不是素数
12 for(i=2; i<=MAX; i++)
13 {
14 if(isprime[i])
15 {
16 s[k++]=i;///保存素数
17 }
18 for(j=i*2; j<=MAX; j+=i)
19 {
20 isprime[j]=0;///素数的倍数都不是素数
21 }
22 }
23 }
24 int main()
25 {
26 int n,i,j,count,sum;
27 prime();
28 while(scanf("%d",&n)!=EOF)
29 {
30 if(n==0)
31 {
32 break;
33 }
34 count=0;
35 sum=0;
36 j=1;
37 i=0;
38 while(1)
39 {
40 while(sum<n&&s[i+1]<=n)///s[i+1]<=n表示这个数是可以加的,即右端点还可以继续右移
41 {
42 sum=sum+s[++i];
43 }///开始先找到一个满足条件的序列,之后扩大左端点
44 if(sum<n)
45 {
46 break;
47 }
48 else if(sum>n)
49 {
50 sum=sum-s[j];
51 j++;
52 }///不断扩大右端点
53 else if(sum==n)///存在这样一个连续素数的集合
54 {
55 count++;
56 sum=sum-s[j];///继续扩大右端点
57 j++;
58 }
59 }
60 printf("%d\n",count);
61 }
62 return 0;
63 }

Sum of Consecutive Prime Numbers(素数打表+尺取)的更多相关文章

  1. POJ 2739 Sum of Consecutive Prime Numbers(素数)

    POJ 2739 Sum of Consecutive Prime Numbers(素数) http://poj.org/problem? id=2739 题意: 给你一个10000以内的自然数X.然 ...

  2. poj 2739 Sum of Consecutive Prime Numbers 素数 读题 难度:0

    Sum of Consecutive Prime Numbers Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 19697 ...

  3. ACM:POJ 2739 Sum of Consecutive Prime Numbers-素数打表-尺取法

    POJ 2739 Sum of Consecutive Prime Numbers Time Limit:1000MS     Memory Limit:65536KB     64bit IO Fo ...

  4. POJ 2739 Sum of Consecutive Prime Numbers【素数打表】

    解题思路:给定一个数,判定它由几个连续的素数构成,输出这样的种数 用的筛法素数打表 Sum of Consecutive Prime Numbers Time Limit: 1000MS   Memo ...

  5. POJ 2739 Sum of Consecutive Prime Numbers( *【素数存表】+暴力枚举 )

    Sum of Consecutive Prime Numbers Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 19895 ...

  6. POJ 2739. Sum of Consecutive Prime Numbers

    Sum of Consecutive Prime Numbers Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 20050 ...

  7. POJ2739 Sum of Consecutive Prime Numbers(尺取法)

    POJ2739 Sum of Consecutive Prime Numbers 题目大意:给出一个整数,如果有一段连续的素数之和等于该数,即满足要求,求出这种连续的素数的个数 水题:艾氏筛法打表+尺 ...

  8. POJ 2739 Sum of Consecutive Prime Numbers(尺取法)

    题目链接: 传送门 Sum of Consecutive Prime Numbers Time Limit: 1000MS     Memory Limit: 65536K Description S ...

  9. POJ2739 Sum of Consecutive Prime Numbers 2017-05-31 09:33 47人阅读 评论(0) 收藏

    Sum of Consecutive Prime Numbers Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 25225 ...

  10. Sum of Consecutive Prime Numbers

    Sum of Consecutive Prime Numbers http://poj.org/problem?id=2739 Time Limit: 1000MS   Memory Limit: 6 ...

随机推荐

  1. js 中~~是什么意思?

    其实是一种利用符号进行的类型转换,转换成数字类型 ~~true == 1~~false == 0~~"" == 0~~[] == 0 ~~undefined ==0~~!undef ...

  2. ethereum(以太坊)(实例)--"安全的远程购买"

    pragma solidity ^0.4.10; contract Safebuy{ uint public price; address public seller; address public ...

  3. window安装ubuntu系统

  4. php函数strtotime结合date时间修饰语的使用

    下面简单介绍在项目开发中date时间函数和strtotime所遇到的问题,以及解决办法. 原文地址:小时刻个人技术博客 > http://small.aiweimeng.top/index.ph ...

  5. IDELPHI是一个MIS系统初学者的乐园空间

    DELPHI的长处之一是MIS系统,此空间介绍了MIS中种种问题,及使用DELPHI XE做的办法. 为什么选择DELPHI? DELPHI是开发效率很高的一个工具,但也许很多人都喜欢选择微软.NET ...

  6. 洛谷P4526 【模板】自适应辛普森法2(simpson积分)

    题目描述 计算积分 保留至小数点后5位.若积分发散,请输出"orz". 输入输出格式 输入格式: 一行,包含一个实数,为a的值 输出格式: 一行,积分值或orz 输入输出样例 输入 ...

  7. TCP/IP协议族、版本以及编址机制

    TCP/IP协议族简称TCP/IP.这么命名是因为该协议家族中的两个核心协议:TCP(传输控制协议)和IP(网际协议),为该家族中最早通过的标准.TCP/IP提供点对点的链接机制,将数据应该如何封装, ...

  8. 16-oauth2-oidc-Client实现

    1-新建.net core2.1 mvc网站 2-在Startup.config文件增加相关代码, 下面代码已经配置好oidc客户端了,并设置本mvc启动ip为5009 public void Con ...

  9. BINARYSEARCH有り無しのパフォーマンスの違い

    BINARY SEARCHを使用したパフォーマンス検証を行ってみた.この例では.BKPFが約1万件.BSEGが約3万件になるよう調整している.また.SQLの実行に係る時間は無視する事にする. サンプル ...

  10. [Real World Haskell翻译]第20章 Haskell系统编程

    第20章 Haskell系统编程 到目前为止,我们已经讨论了大多数的高层次的概念.Haskell也可以用于较低级别的系统编程.很可能是用haskell编写出底层的与操作系统接口的程序. 在本章中,我们 ...