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. LogViewer超大文本浏览工具

    官方下载 LogViewer 是一款简单好用的log日志文件查看工具.您想要查看log日志吗?那么不妨来看看这款LogViewer .该款工具可以在短短数秒内打开上G的LOG文件,支持高亮某行文字(例 ...

  2. 02JavaScript用法

    前言: 介绍一下javascript的最基础语法规范和用法. HTML 中的脚本必须位于 <script> 与 </script> 标签之间. 脚本可被放置在 HTML 页面的 ...

  3. 用jQuery实现(全选、反选、全不选功能)

    在jQuery选择器的基础下我们实现一个全选,反选,全不选功能! <script type="text/javascript">        $(function ( ...

  4. 微信支付tp5.1集合

    多商户号微信支付 配置 自己改一改 逻辑 就好了! 写的菜 勿喷 extend下面 主要目录 多商户号 配置项 根据自己的需求更改 可能有一些地方存在BUG 自己调试一下 就OK了,别像一个麻瓜一样 ...

  5. Excel2003 去除重复项

    利用 数据透视表 间接 获得 非重复项 1] 选中要去除重复项 的列 数据 2] 3]将选中列移动到 左侧 即可 4] 或者导入到Access中,用sql 语句中的 distinct SELECT D ...

  6. C语言变量的初始化

    关于C语言变量是否需要初始化的问题.以前西北工业大学的C语言老师说的是,需要初始化,如果不初始化就使用的话,变量的值是以前遗留在内存中的,是不确定的(这只是针对局部变量的).C语言全局变量如果没有初始 ...

  7. MySQL 重要语法

    1.查询表abc中的所有数据: SELECT * FROM abc WHERE 1=1; where 1=1; 这个条件始终为True,在不定数量查询条件情况下,1=1可以很方便的规范语句.

  8. R语言爬虫:爬取百度百科词条

    抓取目标:抓取花儿与少年的百度百科中成员信息 url <- "http://baike.baidu.com/item/%E8%8A%B1%E5%84%BF%E4%B8%8E%E5%B0 ...

  9. 从官网下载centos

    今天想从官网下载6.5版本的CentOS,结果找了好一会儿才找到,赶紧记录下来,以备以后查询. 第一步在百度搜索centos,点击"Download CentOS",如下图所示. ...

  10. Net Core学习笔记

    Net Core 官网:https://dotnet.github.io/ Net Core Api: https://docs.microsoft.com/en-us/dotnet/api/?vie ...