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
aaarticlea/jpeg;base64,/9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCAARABIDASIAAhEBAxEB/8QAGAABAAMBAAAAAAAAAAAAAAAAAAMFBwT/xAAlEAACAQQCAQMFAAAAAAAAAAABAgMABAURBiESIjFBMjZxdbP/xAAYAQACAwAAAAAAAAAAAAAAAAAAAwEEBf/EABsRAQEAAgMBAAAAAAAAAAAAAAEAAgMEEyFh/9oADAMBAAIRAxEAPwDQeRW+SyVnctBIkiiScOk87qm0ciP0aZWA8dkEDZA2fcGPCWPI+PXkUt3GIcQjkyQxTGdtMrAhUVQO5CraVd/UB1pa7cnHmbaW5hjxEktoZJJGulnjChWYsT4lvLoHvr3B1vommvuQYaSe/jGSxrW9yXEiCWIiTe9eWohvs/LH8n5ocDh9jlnsER+zt+9wDE9G0uKWO4hSaGRJIpFDI6MCrKewQR7ilVfFPs7B/r4P5rStB8ZJW9KUqIlKUoi//9k=" alt="" /> Copy sample input to clipboard 
2
3
17
41
20
666
12
53
0
Sample Output
1
1
2
3
0
0
1
2
分析:首先根据题目要求是给定一个数,找到能够满足如下条件的序列个数:
序列所有元素是连续的素数
序列元素之和为给定数
首先我们已知数值范围是 ~,那么先找到 ~10000里面的所有素数,而不应该在每输入一个数都重新找一次。
还有一个是素数是要连续的,这样在寻找的时候就减少了很多搜索。对于每一个数都只需要判断它的下一个。 算法思想如下:
从小于给定数的最大素数出发,利用深搜,剪枝依据是每个元素的子节点只能是其素数列表的前一个元素,比如给定 ,那么第一个素数为7
>
==
终止
终止
在深搜的时候,判断当前素数之和是不是小于给定数,如果不是,就不需要继续考虑其子节点了。
#include <iostream>
#include <stack>
#include <cstring>
#include <map> using namespace std; void getPrimerList(map<int, int> &primerList, int num) { // 找到给定范围的所有素数
int *array = new int[num];
memset(array, , sizeof(array) * num);
int k = ;
for (int i = ; i < num; ++i) {
if (array[i] == ) {
primerList[k++] = i;
for (int j = * i; j < num; j += i) {
array[j] = ;
}
}
}
} struct Node {
Node(int v = , int s = ): value(v), sum(s) { }
int value;
int sum;
}; int main(int argc, char const *argv[])
{
map<int, int> primerList;
getPrimerList(primerList, );
int number;
while (cin >> number && number != ) {
int factorListNum = ;
if (number >= ) {
int numT;
map<int, int>::iterator iter = primerList.end();
--iter;
for (; iter != primerList.begin(); --iter) {
if (iter->second <= number) {
numT = iter->second;
break;
}
}
if (iter == primerList.begin())
numT = iter->second;
stack<Node> s;
// 从小于等于给定数的第一个素数开始,以每个素数为起点向前查找
// 也就是说,这里相当于深搜多棵树
for (; iter != primerList.begin(); --iter) {
s.push(Node(iter->first, iter->second));
}
s.push(Node(iter->first, iter->second));
while (!s.empty()) {
Node curent = s.top();
s.pop();
if (curent.sum == number) {
factorListNum++;
} else if (curent.sum < number){
if ((curent.value - ) >= ) {
s.push(Node(curent.value - , primerList[curent.value - ] + curent.sum));
}
} // else 其他情况下就不再需要继续往下子节点遍历
}
}
cout << factorListNum << endl;
}
return ;
}

sicily 1259. Sum of Consecutive Primes的更多相关文章

  1. POJ 2739. Sum of Consecutive Prime Numbers

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

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

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

  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. POJ2739 Sum of Consecutive Prime Numbers(尺取法)

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

  5. 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 ...

  6. Sum of Consecutive Prime Numbers

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

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

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

  8. POJ.2739 Sum of Consecutive Prime Numbers(水)

    POJ.2739 Sum of Consecutive Prime Numbers(水) 代码总览 #include <cstdio> #include <cstring> # ...

  9. poj 2379 Sum of Consecutive Prime Numbers

                                                                                                        ...

随机推荐

  1. Innobackupx工具命令简单解析

    --defaults-file 同xtrabackup的--defaults-file参数,指定mysql配置文件; --apply-log 对xtrabackup的--prepare参数的封装; - ...

  2. Mining Your Own Business UVALive - 5135(点双联通分量)

    these days I‘m tired!,but very happy... #include<cstdio> #include<cstring> #include<s ...

  3. NOI2018前的每日记录

    NOI2018前的每日记录 开头 今天是\(2018.7.2\),不知不觉已经这么久了.本来还是高一的小蒟蒻,过不了多久就要成为高二的老年选手了. 再过半个月我也要去\(NOI\)打酱油了.我这种D类 ...

  4. [ACM]Codeforces Round #534 (Div. 2)

    A. Splitting into digits Vasya has his favourite number n. He wants to split it to some non-zero dig ...

  5. 手脱ACProtect v1.35(有Stolen Code)

    1.载入PEID ACProtect v1.35 -> risco software Inc. & Anticrack Soft 2.载入OD,需要注意的是,异常选项除了[内存访问异常] ...

  6. 改变 jq中 data-id 的值

    if (_this.hasClass('default_btn_is')){ _this.removeClass('default_btn_is'); _this.addClass('default_ ...

  7. 「Linux」制作一个Linux系统

    一.前言 Linux操作系统至1991年10月5日诞生以来,就其开源性和自由性得到了很多技术大牛的青睐,每个Linux爱好者都为其贡献了自己的一份力,不管是在Linux内核还是开源软件等方面,都为我们 ...

  8. eclipse插件大全(官方)

    eclipse插件大全:http://marketplace.eclipse.org/metrics/successful_installs 各个版本插件: http://download.eclip ...

  9. 编写可移植C/C++程序的要点

    1.分层设计,隔离平台相关的代码.就像可测试性一样,可移植性也要从设计抓起.一般来说,最上层和最下层都不具有良好的可移植性.最上层是GUI,大多数GUI都不是跨平台的,如Win32 SDK和MFC.最 ...

  10. Java设计模式の模版方法模式

    概述 模板方法模式是类的行为模式.准备一个抽象类,将部分逻辑以具体方法以及具体构造函数的形式实现,然后声明一些抽象方法来迫使子类实现剩余的逻辑.不同的子类可以以不同的方式实现这些抽象方法,从而对剩余的 ...