个人感觉写的真没啥问题吧
(其实是太菜了看不出来)
Code:
#include<bits/stdc++.h>
#define int long long
#define N 25
using namespace std;
int n,k,a[N],ans;
bool vi[5000050]={false};
bool isPrime(int n){
if (n==1||n==2)return true;
for (int i=2;i<sqrt(n*1.0);i++){
if (n%i==0)return false;
}
return true;
}
void dfs(int dep,int sum,int startx){
if (dep>k){
bool f=isPrime(sum);
if (f)ans++;
}else{
for (int i=startx;i<=n;i++){
if (!vi[a[i]]){
vi[a[i]]=true;
dfs(dep+1,sum+a[i],i+1);
vi[a[i]]=false;
}
}
}
}
signed main(){
ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
cin>>n>>k;
for (int i=1;i<=n;i++){
cin>>a[i];
}
sort(a,a+n+1);
dfs(1,0,1);
cout<<ans;
}
求dalao指点!