33分求助
查看原帖
33分求助
615297
frankfan7707楼主2022/8/3 14:12

rt

#include<bits/stdc++.h>
using namespace std;
int n,k,x[205],ans,a[205],vis[205],ind,b[205];
bool isprime(int n){
	if(n==0 or n==1)return 0;
	for(int i=2;i<=sqrt(n);i++)if(n%i==0)return 0;
	return 1;
}
void dfs(int pos){
	if(pos==k+1){
		int temp=0;
		for(int i=1;i<=k;i++){
			temp+=x[a[i]];
		}
		if(isprime(temp)){
			bool flag=1;
			for(int i=1;i<=ind;i++){
				if(b[i]==temp){
					flag=0;break;
				}
			}
			if(flag){
				ans++;
				b[++ind]=temp;
			}
		}
		return;
	}
	for(int i=1;i<=n;i++){
		if(!vis[i]){
			vis[i]=1;
			a[pos]=i;
			dfs(pos+1);
			vis[i]=0;
		}
	}
}
int main(){
	cin>>n>>k;
	for(int i=1;i<=n;i++){
		cin>>x[i];
	}
	dfs(1);
	cout<<ans;
} 
2022/8/3 14:12
加载中...