0分求助
查看原帖
0分求助
983201
sapnep楼主2023/8/8 11:15
#include<bits/stdc++.h>
using namespace std;
int num,n,m; 
int a[101];
bool isprime(int t){
	if (t==1) return false;
	if (t<=3) return true;
	for (int i=2;i<=sqrt(t);i++)
	  if (t% i==0) return false;
	return true;//素数 
}
void dfs(int t,int w,int sum){
	if (w+n-t+1<m) return;//可行性剪枝 
	if (w==m){
		if (isprime(sum))
		  num++;
		return;
	}
	for (int i=t;i<=n;i++)
		dfs(i+1,w+1,sum+a[i]);	
}
int main(){
	int n,m;
	scanf("%d%d",&n,&m);
	for (int i=1;i<=n;i++)
	  scanf("%d",&a[i]);
	dfs(1,0,0);//搜索 
	printf("%d",num);
	return 0;
}
2023/8/8 11:15
加载中...