写了一个dfs但是会计重
#include<bits/stdc++.h>
using namespace std;
int a[21],ans,tot;
bool p[21];
int n,k;
inline bool isPrime(int a) {
if (a < 2) return 0;
for (int i = 2; i * i <= a; ++i)
if (a % i) return 0;
return 1;
}
inline void dfs(int l,int i){
if(l==k){
if(isPrime(tot)==1)
ans++;
return;
}
for(int q=i;q<=n;++q){
if(!p[q]){
p[q]=1;
tot+=p[q];
dfs(l+1,q+1);
p[q]=0;
tot-=p[q];
}
}
}
int main () {
cin>>n>>k;
for(int i=1;i<=n;++i){
scanf("%d",&a[i]);
}dfs(0,1);
printf("%d",ans);
return 0;
}