POJ 2739 Sum of Consecutive Prim…

 题目大意:一些正数可以被许多一个或者多个连续的素数替代,问,一个正整数有几种替代方式。正整数范围2~10000

注意的地方:一定要注意,这一题的关键字眼,连续,然后就是用循环解决

 

思路分析:

1.将2~10000中所以的素数存储到一个数组中,数组的大小试几组数据就知道了, 这里就取a[1250]

2.判断本身是不是素数,这儿不能少。

3.找到所有小于输入数的素数,然后由2+3+5+7……

                                 再 3+5+7……

                                      ……

运用两个循环嵌套就可以,注意一下循环的控制条件就行了。

 

贴下AC代码:(256k,94ms)

 

C++语言:
#include<iostream>
using namespace std;

bool Prime_Numbers( int n) //素数判断函数
{
    if(n == 2) return 1;
    else if(n % 2 == 0) return 0;
    else
        for( int i = 3; i <n / 2; i ++)
            if(n % i == 0)
                    return 0;                
    return 1;
}


int main()
{
    int a [ 1250 ] = { 2 , 3 };
    int i , j;
    int num;     //要输入的数
    int temp;   //计数器
    int sum;   //几个素数相加的和
        for( i = 0 , j = 2;( j < 10000) && ( i < 1250); j ++)       //存储在2到10000的所有的素数
            if( Prime_Numbers( j ) == 1)
            {
                a [ i ] = j;
                i ++;
            }
   
    while(( cin >> num) && num != 0 )
    {
        temp = 0;
        sum = 0;
        if( Prime_Numbers( num ) == 1) temp ++;
            for( i = 0 ; a [ i ] < num; i ++)     //第一次的时候WA了,主要就是忘了写a[i]<num这样一个控制循环的语句
            {
                for( j = i ;   ; j ++)
                {
                    sum += a [ j ];
                    if( sum == num)
                    {
                            temp ++;
                            sum = 0;
                            break;
                    }
                    else if( sum > num)
                    {
                        sum = 0;
                        break;
                    }
                }
            }
        cout << temp << endl;
    }
}

你可能感兴趣的:(POJ 2739 Sum of Consecutive Prim…)