回溯
#include <iostream>
#include <set>
using namespace std;
#define M 20
//4 3
//3 7 12 19
int arr[M + 5];
int ans = 0, sum = 0;
int is_prime(int x) {
for (int i = 2; i * i <= x; i++) {
if (x % i == 0) return 0;
}
return 1;
}
void fun(int n, int k, int i, int j) {
if (i == k) {
if (is_prime(sum)) ans += 1;
return;
}
for (int r = j; r <= n; r++) {
sum += arr[r];
fun(n, k, i + 1, r + 1);
sum -= arr[r];
}
return;
}
int main() {
int n, k;
cin >> n >> k;
for (int i = 1; i <= n; i++) {
cin >> arr[i];
}
fun(n, k, 0, 1); //第三位表示当前已经选了几个数,第四位表示从当前开始往后遍历
cout << ans;
return 0;
}