16分求助!
查看原帖
16分求助!
254383
lblinm楼主2022/10/26 07:43
#include <bits/stdc++.h>
using namespace std;
int arr[25],k,n,sum,res,Res[100];
bool boo[25];
bool prime(int n){           //判断是否为质数
    if(n==1) return 0;
    int rootn=sqrt(n);
    for(int i=2;i<=rootn;i++){
        if(n%i==0) return 0;
    }
    return 1;
}
void combine(int pos,int nums){  //递归搜索组合数
    if(nums==k){
        for(int i=0;i<n;i++){
            if(boo[i]) sum+=arr[i];
        }
        if(prime(sum)){
            Res[res]=sum;
            res++;
            cout<<sum<<endl;
        }
        sum=0;
        pos++;
    }
    if(pos>=n)return;
    if(!boo[pos]){
        boo[pos]=1;
        combine(pos+1,nums+1);
        boo[pos]=0;
    }
    combine(pos+1,nums);
}
int main(){
    cin>>n>>k;
    for(int i=0;i<n;i++){
        cin>>arr[i];
    }
    combine(0,0);
    for(int i=0;i<res-1;i++){           //去重
        for(int j=i+1;j<res;j++){
            if(Res[j]==Res[i]) res--;
        }
    }
    cout<<res;
    return 0;
}
2022/10/26 07:43
加载中...