POJ 2739 Sum of Consecutive Prime Numbers(素数)

http://poj.org/problem?id=2739

题意:

给你一个10000以内的自然数X,然后问你这个数x有多少种方式能由连续的素数相加得来?

分析:

首先用素数筛选法把10000以内的素数都找出来按从小到大保存到prime数组中。

然后找到数X在prime中的上界, 如果存在连续的素数之和==X, 那么一定是从一个比X小的素数开始求和(不会超过X的上界),直到和sum的值>=X为止。

所以我们暴力枚举10000以内的所有可能的素数相加和的起始点i,然后求连续素数的和,看看当前以prime[i]开始的连续素数和是否正好==X。

由于10000以内的素数很少(只有1000多个),所以本题找连续素数和可以暴力枚举解决。

AC代码:

#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
const int maxn=10000;

//筛选法求素数
int prime[maxn+5];
int get_prime()
{
    memset(prime,0,sizeof(prime));
    for(int i=2;i<=maxn;i++)
    {
        if(!prime[i]) prime[++prime[0]]=i;
        for(int j=1; j<=prime[0] &&prime[j]<=maxn/i; j++)
        {
            prime[prime[j]*i]=1;
            if(i%prime[j]==0) break;
        }
    }
    return prime[0];
}

int main()
{
    //预处理:求10000以内所有素数
    get_prime();

    int x;
    while(scanf("%d",&x)==1 && x)
    {
        if(x<2)
        {
            printf("0\n");
            continue;
        }
        int bound=lower_bound(prime+1,prime+prime[0]+1,x)-prime;
        int ans=0;
        if(prime[bound]==x) ans++;
        for(int i=1;i<bound;i++)
        {
            int sum=0;
            for(int j=i;j<bound;j++)
            {
                sum += prime[j];
                if(sum==x)
                {
                    ans++;
                    break;
                }
            }
        }
        printf("%d\n",ans);
    }
    return 0;
}
时间: 2024-10-27 02:24:47

POJ 2739 Sum of Consecutive Prime Numbers(素数)的相关文章

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

Sum of Consecutive Prime Numbers Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 19697   Accepted: 10800 Description Some positive integers can be represented by a sum of one or more consecutive prime numbers. How many such representatio

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

解题思路:给定一个数,判定它由几个连续的素数构成,输出这样的种数 用的筛法素数打表 Sum of Consecutive Prime Numbers Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 20020   Accepted: 10966 Description Some positive integers can be represented by a sum of one or more consecutive

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

Sum of Consecutive Prime Numbers Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 19895   Accepted: 10906 Description Some positive integers can be represented by a sum of one or more consecutive prime numbers. How many such representatio

POJ 2739 Sum of Consecutive Prime Numbers(水题)

Sum of Consecutive Prime Numbers Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 20560   Accepted: 11243 Description Some positive integers can be represented by a sum of one or more consecutive prime numbers. How many such representatio

poj 2739 Sum of Consecutive Prime Numbers 尺取法

Sum of Consecutive Prime Numbers Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 21924   Accepted: 11996 Description Some positive integers can be represented by a sum of one or more consecutive prime numbers. How many such representatio

poj 2739 Sum of Consecutive Prime Numbers(尺取法)

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

POJ 2739 Sum of Consecutive Prime Numbers(素数打表水题)

[题意简述]:题意很简单,就是用连续的素数加和,计算有多少个这样的连续的素数数列可以使这个序列的和等于输入的数. [分析]:很经典的素数模板,基本所有有关素数的题,我都会使用这个模板. // 268K 16Ms #include<iostream> using namespace std; #define N 10000 bool isprime[N]; long long prime[1300],nprime; // 注意long long void doprime() { long lon

POJ 2739 Sum of Consecutive Prime Numbers 难度:0

题目链接:http://poj.org/problem?id=2739 #include <cstdio> #include <cstring> using namespace std; int method[10001][1300]; int dp[10001]; bool isntprime[10001]; int heap[1300],cnt; void calprime(){ method[2][0]=1; dp[2]++; heap[cnt++]=2; for(int i

POJ 2739 Sum of Consecutive Prime Numbers

题意:问一个数字能被多少种连续的质数相加得到. 解法:一开始没看见是连续的……SB了半天……后来打了个表……就这样吧 代码: #include<stdio.h> #include<iostream> #include<algorithm> #include<string> #include<string.h> #include<math.h> #include<limits.h> #include<time.h>