生成全排列+判素数
判素数%手癌写成了& debug了五分钟
静态查错比较重要啊
#include<bits/stdc++.h>
using namespace std;
template <typename T> void read(T &x){
x=0;int f=1;char ch=getchar();
for(;!isdigit(ch);ch=getchar())if(ch=='-')f=-1;
for(;isdigit(ch);ch=getchar())x=(x<<1)+(x<<3)+ch-'0';
x*=f;
}
int n,m;
int ans;
int a[110];
int c[110];
bool v[110];
bool my_judge(int x){
if(x<2) return false;
if(x==2) return true;
for(int i=2;i*i<=x;++i){
if(x%i==0) return false;
}
return true;
}
void dfs(int k){
if(k==m+1){
int now=0;
//for(int i=1;i<=m;++i) cout<<c[i]<<" ";
//cout<<endl;
for(int i=1;i<=m;++i) now+=a[c[i]];
//cout<<now<<endl;
if(my_judge(now)) ans++;
}
else{
for(int i=c[k-1]+1;i<=n;++i){
if(!v[i]){
c[k]=i;
v[i]=1;
dfs(k+1);
c[k]=0;
v[i]=0;
}
}
}
}
int main(){
read(n),read(m);
for(int i=1;i<=n;++i) read(a[i]);
memset(c,0,sizeof(c));
memset(v,0,sizeof(v));
dfs(1);
cout<<ans<<endl;
return 0;
}