POJ2739Sum of Consecutive Prime Numbers

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

题意 :一个正整数能够表示为一个或多个连续素数和,给你一个正整数,让你求,有多少个这样的表示。例如:整数53有两种表示方法,5+7+11+13+17和53,41有三种表示方法,2+3+5+7+11+13,11+13+17还有41,而整数20没有这样的表示方法。

思路 :因为取值到10000,所以先素数打表,然后枚举所有的表示方法中连续的素数里最小的那个即可。

#include <iostream>

using namespace std;

const int maxp = 2000,n = 10000 ;
int prime[maxp],total = 0 ;
bool isprime(int k)
{
    for(int i = 0 ; i < total ; i++)
        if(k % prime[i] == 0)
            return false ;
    return true ;
}
int main()
{
    for(int i = 2 ; i <= n ; i++)
    {
        if(isprime(i))
            prime[total++] = i ;
    }
    prime[total] = n+1 ;
    int m ;
    while(cin>>m &&m)
    {

        int ans = 0 ;//次数初始化为0
        for(int i = 0 ; m >= prime[i] ; i++)
        {
            int cnt = 0 ;//求连续素数的和
            for(int j = i ; j < total&&cnt < m ; j++)
                cnt += prime[j] ;
            if(cnt == m)
                ++ans ;
        }
        cout<<ans<<endl ;
    }
    return 0;
}
View Code
原文地址:https://www.cnblogs.com/luyingfeng/p/3427170.html