#include <iostream>
#include <string.h>
#include <vector>
using namespace std;
int number[20];
int ans = 0;
vector <int> v;
bool isprim(int a){
for (int i = 3;i <= a / 2;i += 2){
if (a % i == 0 && a / i != 1){
return false;
}
}
return true;
}
int dfs(int k,int n){
if (v.size() >= k){
int sum = 0;
for (int i = 0;i < v.size();i++){
//cout << number[v[i]] << ' ';
sum += number[v[i]];
}
if (isprim(sum))ans++;
//cout << ' ' << sum << endl;
return 1;
}
for (int i = v.size();i < min(int(v.size() + k + 1),n);i++){
bool flag = false;
for (int j = 0;j < v.size();j++){
if (v[j] >= i){
flag = true;
break;
}
}
if (flag)continue;
v.push_back(i);
dfs(k,n);
v.pop_back();
}
}
int main(){
int n,k;
cin >> n >> k;
memset(number,0,sizeof(number));
for (int i = 0;i < n;i++)cin >> number[i];
dfs(k,n);
cout << ans;
}
刚学的DFS,#3 #6没有过,第三个点样例给的是13,程序输出是14,求助!
不会是质数判断写错了吧?