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

 

你可能感兴趣的:(number)