33分求助
查看原帖
33分求助
640477
biophitma_wby楼主2022/8/3 17:14
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<cstdio>
using namespace std;
int n,k;
int s[30];
bool isUse[5000010];
bool Sushu(int d){
	if(d==1)return false;
	else if(d==2)return true;
	else{
		for(int i=2;i<=sqrt(d);i++){
			if(d%i==0)return false;
		}
		return true;
	}
}
int sum=0;
bool isuse2[50000010]; 
void dfs(int a,int m){
	if(a>k){
		if(Sushu(m)==true&&isuse2[m]==false){
			sum++;
			isuse2[m]=true;
		}
	}
	else{
		for(int i=1;i<=n;i++){
			if(isUse[s[i]]==false){
				isUse[s[i]]=true;
				dfs(a+1,m+s[i]);
				isUse[s[i]]=false;
			}
		}
	}
}
int main(){
	cin>>n>>k;
	for(int i=1;i<=n;i++){
		cin>>s[i];
	}
	dfs(1,0);
	cout<<sum;
    return 0;
}

2022/8/3 17:14
加载中...