版权声明:转载请注明原文地址即可,要是本文对您有些许帮助的话,请您在下方点个赞,谢谢啦ヾ(o◕∀◕)ノヾ https://blog.csdn.net/qq_33583069/article/details/88584612
#include<bits/stdc++.h>
using namespace std;
int a[20],n,k;bool vis[20];
bool isPrime(int x){
int M=sqrt(x+0.5);
for(int i=2;i<=M;i++)if(x%i==0)return false;
return true;
}
int dfs(int cur,int pos,int sum){
if(!cur){
if(isPrime(sum))return 1;
else return 0;
}
int ans = 0;
for(int i=pos;i<n;i++)if(!vis[i]){
vis[i]=true;
ans+=dfs(cur-1,i+1,sum+a[i]);
vis[i]=false;
}
return ans;
}
int main(){
cin>>n>>k;
for(int i=0;i<n;i++)cin>>a[i];
cout<<dfs(k,0,0);
return 0;
}