请用C++回答以下问题:已知 n个整数 x1,x2,…,xn,以及1个整数k(k\u003Cn)。从n个整数中任选k个整数相加,可分别得到一系列的和。例如当n=4,k=3,4个整数分别为3,7,12,19时,可得全部的组合与它们的和为:\n3 + 7 + 12 = 22\n3 + 7 + 19 = 29\n7 + 12 + 19 = 38\n3 + 12 + 19 = 34。\n现在,要求你计算出和为素数共有多少种。例如上例,只有一种的和为素数:3+7+19=29。
时间: 2023-04-11 11:02:31 浏览: 176
以下是C语言代码:
#include <stdio.h>
int isPrime(int n) { // 判断一个数是否为素数
if (n <= 1) return 0;
for (int i = 2; i * i <= n; i++) {
if (n % i == 0) return 0;
}
return 1;
}
int main() {
int n, k;
scanf("%d %d", &n, &k);
int x[n];
for (int i = 0; i < n; i++) {
scanf("%d", &x[i]);
}
int count = 0;
for (int i = 0; i < (1 << n); i++) { // 枚举所有可能的组合
int sum = 0;
int cnt = 0;
for (int j = 0; j < n; j++) {
if (i & (1 << j)) {
sum += x[j];
cnt++;
}
}
if (cnt == k && isPrime(sum)) { // 如果选出的数的个数为k且和为素数,计数器加1
count++;
}
}
printf("%d\n", count);
return 0;
}
输入格式为:第一行为n和k,表示有n个整数,选k个整数相加;第二行为n个整数x1,x2,...,xn,表示这n个整数的值。
输出为和为素数的组合数。
例如,输入:
4 3
3 7 12 19
输出:
1
解释:选出的三个数为3, 7, 19,它们的和为29,是一个素数,因此只有一种和为素数的组合。
阅读全文