这道题用bfs,难点是去重
#include<bits/stdc++.h>
using namespace std;
const int maxn=25;
int n,k,a[maxn],sum;
bool isprime(int x){
for(int i=2;i*i<=x;i++){
if(x%i==0) return false;
}
return true;
}
void dfs(int x,int start,int num){
if(x==k&&isprime(num)){
sum++;
return;
}
for(int i=start+1;i<=n;i++){
dfs(x+1,i,num+a[i]);
}
}
int main(){
scanf("%d%d",&n,&k);
for(int i=1;i<=n;i++)
scanf("%d",&a[i]);
dfs(0,0,0);
printf("%d\n",sum);
}