Skip to content
Author: loop3r
Date: 20260318
tag: 递归
link: https://www.luogu.com.cn/problem/P1036

问题描述

link

分析

参考代码

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;
}