已知n个整数x1,x2,x3……xn以及⼀个整数k(k<n)。从n个整数中任选k个整数相加,可分别得到⼀系列的和.
现在,要求你计算出和为素数共有多少种
n,k
x1,x2……xn
一个整数,表示满足条件的种数
代码(16T,4WA)
#include<bits/stdc++.h>
#define ll long long
using namespace std;
int n,k,sum,cnt;
int a[25],s[25];//a表示第i个数的编号,s表示第i个数的值
bool vis[25];
bool is_prime(int x){
for(int i=2;i<sqrt(x);i++){
if(x%i==0){
return false;
}
}
return true;
}
void dfs(int x) {
if(x>k){//选完了
if(is_prime(sum)) cnt++;
return;
}
for(int i=x+1;i<=n;i++){//编号为x+1到n
if(vis[i]) continue;//编号为i的数已使用
sum+=s[i];//求和
vis[i]=1;//使用过
a[x+1]=i;
dfs(x+1);//递归
sum-=s[i];//清空
vis[i]=0;
a[x+1]=0;
}
}
int main() {
ios_base::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin>>n>>k;
for(int i=1;i<=n;i++){
cin>>s[i];
}
sort(s+1,s+n);
dfs(1);
cout<<cnt;
return 0;
}