目录
1. 题目描述
2. 思路分析
dfs枚举组合型
dfs的三个参数含义:
cnt: 当前选了多少个数
sum: 这些数的和
st: 从哪个数开始
3. 代码实现
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define endl '\n'
const int N = 30;
int n, k, a[N], ans;
bool is_prime(int x) {
if (x <= 1) return false;
for (int i = 2; i <= sqrt(x); i++) {
if (x % i == 0) return 0;
}
return 1;
}
void dfs(int cnt, int sum, int st) {
if (cnt == k) {
if (is_prime(sum)) ans++;
return;
}
for (int i = st; i <= n; i++) {
dfs(cnt + 1, sum + a[i], i + 1);
}
}
signed main() {
ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
cin >> n >> k;
for (int i = 1; i <= n; i++) cin >> a[i];
dfs(0, 0, 1);
cout << ans << endl;
return 0;
}