@[jonnyyuan](/user/1010570) 一道很明显的递归题
看下代码 , 解析在注释里 :
```cpp
#include<bits/stdc++.h>
using namespace std;
int n,k;
int a[21];
int ans;
bool zhishu(int num){
if(num==0||num==1){
return 0;//质数特判
}
for(int i=2;i*i<=num;i++){
if(num%i==0){
return 0;
}
}
return 1;
}
void zhaoshu(int geshu,int sum,int head){
//geshu:已经选了几个
//sum:当前的和
//head:下一个值前一个的位置
if(geshu==k){
if(zhishu(sum)==1){
ans++;//符合质数的条件
}
return;
}else {
for(int i=head;i<=n;i++){
zhaoshu(geshu+1,sum+a[i],i+1);//继续递归
}
return;
}
}
int main(){
cin>>n>>k;
for(int i=1;i<=n;i++){
cin>>a[i];
}
sort(a+1,a+n+1);
//输入
zhaoshu(0,0,1);
cout<<ans;
return 0;
}
```
by GXZJQ @ 2023-12-26 19:48:34
@[jonnyyuan](/user/1010570)
您好像理解错了题意并且没有输入k
子集枚举因该会超时
by chennie @ 2023-12-31 11:00:49
@[jonnyyuan](/user/1010570) 1.请在理解一下题意;2.要使用 __builtin_popcount()函数来定k
by axbkY321 @ 2024-02-11 13:49:04