16分求助
查看原帖
16分求助
581107
poppingW楼主2023/7/6 09:31
#include<iostream>
#include<algorithm>
#include<cmath>
#include<cstring>
#include<cstdio>
#include<iomanip>
using namespace std;
const int N = 30, M = 1e7 + 1e6;
int n, k, a[N], vis[M], prime[M], cnt, ans;
void oula() {
	for (int i = 2; i <= M; ++i) {
		if (!vis[i]) prime[cnt++] = i;
		for (int j = 0; j < cnt && i * prime[j] <= M; ++j) {
			vis[i * prime[j]] = true;
			if (i % prime[j] == 0) break;
		}
	}
}
void dfs(int s, int sum) {
	if (s == k + 1) {
		if (!vis[sum]) ans++;
		return;
	}
	for (int i = s; i <= n; ++i) {
		dfs(s + 1, sum + a[i]);
	}
	return;
}
int main() {
	oula();
	scanf("%d%d", &n, &k);
	for (int i = 1; i <= n; ++i) scanf("%d", &a[i]);
	dfs(1, 0);
	printf("%d\n", ans);
	return 0;
}
2023/7/6 09:31
加载中...