先贴代码
#include <iostream>
#include <cmath>
using namespace std;
int N[21];
bool isExist[21];
int cnt;
int sum;
int n;
int k;
bool isPrime(int);
void dfs(int);
int main ()
{
cin>>n>>k;
for(int i=1; i<=n; i++)
{
cin>>N[i];
}
dfs(1);
cout<<cnt;
return 0;
}
bool isPrime(int k)
{
if(k<=1)
{
return false;
}
if(k==2 || k==3)
{
return true;
}
if(k%6!=1 || k%6!=5 )
{
return false;
}
for(int i=5; i<=sqrt(k) ;i+=6)
{
if((k%i==0) || (k%(i+2)==0))
{
return false;
}
}
return true;
}
void dfs(int step)
{
for(int i=1; i<=n; i++)
{
if(!isExist[i])
{
sum+=N[i];
isExist[i]=true;
if(step==k)
{
if(isPrime(sum))
{
cnt++;
}
}
else
{
dfs(step+1);
}
sum-=N[i];
isExist[i]=false;
}
}
return;
}
死活16分。。。