#include<bits/stdc++.h>
using namespace std;
const int N=31;
int arr[N];
int q[N];
int n,k;
int res=0;
bool is_pri(int sum){
if(sum<2)return false;
for(int i=2;i<=sum/i;i++)
{
if(sum%i==0)
{
return false;
}
}
return true;
}
void dfs(int x,int start)
{
if((x+n-start)<k)return ; //剪枝!!
if(x>k)
{
int sum=0;
for(int i=0;i<=k;i++)
{
sum+=arr[i];
}
if(is_pri(sum))
{
res++;
}
return ;
}
for(int i=start;i<=n;i++)
{
q[i]=arr[i];
dfs(x+1,i+1);
q[i]=0;
}
}
int main()
{
scanf("%d",&n);
scanf("%d",&k);
for(int i=0;i<n;i++)
{
scanf("%d",&arr[i]);
}
dfs(1,0);
printf("%d",res);
return 0;
}
DFS剪枝
最新推荐文章于 2024-11-08 17:38:37 发布