题目:

选数

题目解析

看注释

代码

#include <bits/stdc++.h>
using namespace std;

int n, k, cnt = 0;
int num[25]; // 存储数字 

bool is_prime (int x) {
	for (int i = 2; i <= sqrt(x); i++) {
		if (x % i == 0) {
			return false;
		}
	}
	return true;
} // 判断是否为质数(素数) 

void dfs (int number, int sum, int index){ // 深搜,number指选了几个数了
	// sum指和,index下标 
	if(number == k){ // 如果数到了k个数 
		if(is_prime(sum)){ // 如果合为质数 
			cnt++; // ++
		}
	} else {
		for(int i = index; i < n; i++){
			dfs(number + 1, sum + num[i], i + 1);
		} 
	}
}

int main() {
	cin >> n >> k;
	for (int i = 0; i < n; i++) {
		cin >> num[i];
	} // 输入 
	dfs(0, 0, 0); // 深搜qwq 
	cout << cnt << endl;
	return 0;
}