Luogu P1036
#include<cstdio>
#include<cmath>
#include<iostream>
using namespace std;
int num=0,n;
int step[25];int suc=0;
struct a{
int number;
int order;
}a[35];
bool prime (int n){
if(n==1)
return 0;
if(n==2)
return 1;
int i;
int s=sqrt(n)+1;
for(i=2;i<s;i++)
{
if(n%i==0)return 0;
}
return 1;
}
void dfs(int k,int l)
{
if(k==0)
{
if(prime(num))
{
suc++;
}
return;
}
for(int s=l;s<=n;s++)
{
if(step[a[s].order]!=0)
{
num=num+a[s].number;
step[a[s].order]=0;
dfs(k-1,s);
step[a[s].order]=1;
num=num-a[s].number;
}
}
return;
}
int main()
{
int k;
suc=0;
cin>>n>>k;
for(int i=1;i<=25;i++)
{
step[i]=1;
}
for(int i=1;i<=n;i++)
{ a[i].order=i;
cin>>a[i].number;
}
suc=0;
dfs(k,1);
cout<<suc;
return 0;
}