Author: loop3r
Date: 20260318
tag: 递归
link: https://www.luogu.com.cn/problem/P1036问题描述
分析
略
参考代码
cpp
#include <bits/stdc++.h>
using namespace std;
vector<int> v;
int n, m, num[25], ans;
bool is_prime(int n) {
for (int i = 2; i * i <= n; i++) {
if (n % i == 0) return false;
}
return true;
}
void dfs(int u) {
if (v.size() > m || v.size() + (n - u + 1) < m) return ;
if (u == n + 1) {
int s = 0;
for (auto x : v) {
s += num[x];
}
if (is_prime(s)) ans++;
return ;
}
// 选
v.push_back(u);
dfs(u + 1);
v.pop_back();
// 不选
dfs(u + 1);
}
int main() {
cin >> n >> m;
for (int i = 1; i <= n; i++) cin >> num[i];
dfs(1);
cout << ans << endl;
return 0;
}