题解(^_^)
2026-08-25 21:34:26
发布于:浙江
6阅读
0回复
0点赞
#include<bits/stdc++.h>
using namespace std;
int ss(int n)
{
if(n==1)return 0;
for(int i=2;i*i<=n;i++)if(n%i==0)return 0;//判断是否是素数
return 1;
}
long long n,k,x[105];
int vis[105];//标记数组
long long ans;//答案
void dfs(int p,int s)
{
if(p==k)//如果凑齐了,就判断一下。
{
if(ss(s))ans++;
return ;
}
for(int i=1;i<=n;i++)//枚举每个数
{
if(!vis[i])//如果这个数没被用过就用。
{
vis[i]=1;//标记一下
dfs(p+1,s+x[i]);//继续找下一个数
vis[i]=0;//把这个数扔掉。
}
}
}
int main()
{
cin>>n>>k;//输入
for(int i=1;i<=n;i++)cin>>x[i];
dfs(0,0);//深搜枚举
for(int i=1;i<=k;i++)ans/=i;//有可能重复如:1 2 4和1 4 2,所以要去重
cout<<ans;//输出答案
}
这里空空如也




有帮助,赞一个