P1036 选数

题目描述

已知 nnn 个整数 x1,x2,…,xnx_1,x_2,…,x_nx1,x2,,xn,以及111个整数kkk(k<nk<nk<n)。从nnn个整数中任选kkk个整数相加,可分别得到一系列的和。例如当n=4,k=3n=4,k=3n=4,k=3,444个整数分别为3,7,12,193,7,12,193,7,12,19时,可得全部的组合与它们的和为:

3+7+12=223+7+12=223+7+12=22

3+7+19=293+7+19=293+7+19=29

7+12+19=387+12+19=387+12+19=38

3+12+19=343+12+19=343+12+19=34。

现在,要求你计算出和为素数共有多少种。

例如上例,只有一种的和为素数:3+7+19=293+7+19=293+7+19=29。

输入输出格式

输入格式:

 

键盘输入,格式为:

n,kn,kn,k(1≤n≤20,k<n1 \le n \le 20,k<n1n20,k<n)

x1,x2,…,xn(1≤xi≤5000000)x_1,x_2,…,x_n (1 \le x_i \le 5000000)x1,x2,,xn(1xi5000000)

 

输出格式:

 

屏幕输出,格式为: 111个整数(满足条件的种数)。

 

#include<iostream>
int n, k, result = 0;
long long num[51];
long long sum = 0;
bool check(long long a) {
    for (int i = 3; i < a; i++)
        if (a % i == 0) {
            return false;
        }
    return true;
}
void getsum(int x, int y) {
    int i;
    if (x > k) {
        if (check(sum))
            result++; 
        return;
    }
    for (i = y + 1; i <= n; i++)
    {
        sum += num[i];
        getsum(x + 1, i);
        sum -= num[i];
    }
}
int main() {
    using namespace std;
    cin >> n >> k;
    for (int i = 1; i <= n; i++) {
        cin >> num[i];
    }
    getsum(1, 0);
    cout << result;
    return 0;
}

 

posted @ 2019-07-17 01:32  杰尊  阅读(217)  评论(0编辑  收藏  举报