33分求助大佬
查看原帖
33分求助大佬
940940
singularity_yujin楼主2023/4/2 22:41
#include <iostream>
#include <cmath>
#include <vector>
#include <algorithm>
#include <set>
using namespace std;
const int N = 10010;
const long long M = 100000010;
int n, k, ans, cnt, prime1;
int arr[N];
int path[N];
bool st[N];
vector <int>anss;
void dfs(int u) {
	if (u == k) {
		anss.push_back(ans);
		return;

	}
	for (int i = 0; i < n; i++) {
		if (!st[arr[i]]) {
			path[u] = arr[i];
			st[arr[i]] = true;
			ans += path[u];
			dfs(u + 1);
			st[arr[i]] = false;
			ans -= path[u];
		}
	}
}
int main() {
	cin >> n >> k;
	for (int i = 0; i < n; i++) {
		cin >> arr[i];
	}
	dfs(0);
	set<int>s;
	for (int i = 0; i < anss.size(); i++) {
		s.insert(anss[i]);
	}
	set<int>::iterator it;
	for (it = s.begin(); it != s.end(); it++) {
		for (int i = 2; i < *it; i++) {
			if (*it % i == 0) {
				prime1 = 1;
				break;
			}
			else { prime1 = 0; }
		}
		if (prime1 == 0) {
			cnt++;
		}
	}

	cout << cnt;

	return 0;

}
2023/4/2 22:41
加载中...