已知n个整数,以及一个整数k,k<n。从n个整数中任选k个整数相加,可分别得到一系列的和,要求计算出和为素数共有多少种,用c++写
时间: 2024-03-25 22:36:32 浏览: 192
以下是一个用C++解决此问题的代码:
```
#include <iostream>
#include <vector>
#include <cmath>
using namespace std;
bool is_prime(int n) {
if (n < 2) {
return false;
}
for (int i = 2; i <= sqrt(n); ++i) {
if (n % i == 0) {
return false;
}
}
return true;
}
int count_primes(vector<int>& nums, int k) {
int n = nums.size();
int ans = 0;
for (int i = 0; i < (1 << n); ++i) {
if (__builtin_popcount(i) == k) {
int sum = 0;
for (int j = 0; j < n; ++j) {
if ((i >> j) & 1) {
sum += nums[j];
}
}
if (is_prime(sum)) {
ans++;
}
}
}
return ans;
}
int main() {
int n, k;
cin >> n >> k;
vector<int> nums(n);
for (int i = 0; i < n; ++i) {
cin >> nums[i];
}
cout << count_primes(nums, k) << endl;
return 0;
}
```
算法思路:
- 首先定义一个判断素数的函数 `is_prime(int n)`;
- 然后,采用枚举的方式,对于 n 个数中选出 k 个数的组合进行遍历,判断其和是否为素数,如果是素数,则计数器加一;
- 最后输出计数器的值即可。
时间复杂度为 O(2^n * n)。
阅读全文