POJ 2739 E - Sum of Consecutive Prime Numbers 素数打表+尺取法
2016-12-10 20:15
387 查看
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
Sample Output
思路:这个题还是比较好想的,我们只需要素数打表然后由于是连续的,符合尺取法条件,然后套模板就可以了
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#define N 10010
using namespace std;
int a
,prime
,p;
void prim()
{ int i,j;
for(i=2;i<=N;i++)
a[i]=1;
for(i=2;i<=N;i++)
{ if (a[i]!=0)
{ prime[p++]=i;
for(j=i;j<=N;j=j+i)
a[j]=0;
}
}
return ;
}
int solve(int ss)
{ int i,t=0,s=0,sum=0,k=0;
for(i=0;i<p;i++)
{
if(prime[i]>ss)
break;
while(t<p&&sum<ss)
sum+=prime[t++];
if(sum==ss)
k++;
sum-=prime[s++];
if(t==p)
break;
}
return k;
}
int main()
{ int n,count;
p=0;
prim();
while(scanf("%d",&n)!=EOF)
{ if(n==0)
break;
count=solve(n);
printf("%d\n",count);
}
return 0;
}
+ 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 12
思路:这个题还是比较好想的,我们只需要素数打表然后由于是连续的,符合尺取法条件,然后套模板就可以了
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#define N 10010
using namespace std;
int a
,prime
,p;
void prim()
{ int i,j;
for(i=2;i<=N;i++)
a[i]=1;
for(i=2;i<=N;i++)
{ if (a[i]!=0)
{ prime[p++]=i;
for(j=i;j<=N;j=j+i)
a[j]=0;
}
}
return ;
}
int solve(int ss)
{ int i,t=0,s=0,sum=0,k=0;
for(i=0;i<p;i++)
{
if(prime[i]>ss)
break;
while(t<p&&sum<ss)
sum+=prime[t++];
if(sum==ss)
k++;
sum-=prime[s++];
if(t==p)
break;
}
return k;
}
int main()
{ int n,count;
p=0;
prim();
while(scanf("%d",&n)!=EOF)
{ if(n==0)
break;
count=solve(n);
printf("%d\n",count);
}
return 0;
}
相关文章推荐
- 简单的四则运算
- 数的奇偶性
- ACMer博客瀑布流分析
- ACM程序设计大赛题目分类
- 2015年acm国内排名
- 计算字符串最后一个单词长度
- ACM网址
- 1272 小希的迷宫
- 1272 小希的迷宫
- hdu 1250 大数相加并用数组储存
- 矩阵的乘法操作
- 蚂蚁爬行问题
- 蚂蚁爬行问题
- 求两个数的最大公约数【ACM基础题】
- 打印出二进制中所有1的位置
- 杭电题目---一只小蜜蜂
- HDOJ 1002 A + B Problem II (Big Numbers Addition)
- 初学ACM - 半数集(Half Set)问题 NOJ 1010 / FOJ 1207
- 初学ACM - 组合数学基础题目PKU 1833
- POJ ACM 1002