题目:
已知 n 个整数 x1,x2,…,xn,以及一个整数 k(k<n)。从 n 个整数中任选 k 个整数相加,可分别得到一系列的和。例如当 n=4,k=3,4 个整数分别为 3,7,12,19时,可得全部的组合与它们的和为:3+7+12=22 3+7+19=29 7+12+19=38 3+12+19=34。
现在,要求你计算出和为素数共有多少种。
例如上例,只有一种的和为素数:3+7+19=29)。
代码(注释较多,请谅解:):
#include<bits/stdc++.h>
#include<cmath>
using namespace std;
int a[100],b[100],n,k,an,as,c[100];
int ss(int a){
int b;
int c;
for(int i = 2;i < a;++i){
b = a%i;
if(b != 0){
if(i == ceil(sqrt(a))){
c = 1;
return c;
}
}
if(b == 0){
c = 0;
return c;
}
}
}
/*int sz(int x,int s){
for(int i=0;i<=s;i++){
if(x==c[i]){
return 1;
}
}
}*/
int sousuo(int sn){
//cout<<n<<endl;
for(int i=1;i<=k;i++){
if(!b[i]){
as=as+a[sn];
b[i]=1;
//if(sn==k){
if(ss(as)==1){
an++;
c[i]=as;
cout<<as<<endl;
}
//}
else sousuo(sn+1);
b[i]=0;
as=as-a[sn];
}
}
}
int main(){
cin>>n>>k;
for(int i=1;i<=n;i++){
cin>>a[i];
//cout<<a[i]<<" ";
}
sousuo(1);
cout<<an;
}