原题链接
-------------------------------------------------------------------------------------------------------------------
#include <bits/stdc++.h>
using namespace std;
int n,k,sum,x[25],a[25],ans;
bool prime(int n) //判断一个数是否为质数
{
int len=sqrt(n);
for(int i=2; i<=len; i++)
{
if(n%i==0)
{
return 0;
}
}
return 1;
}
int dfs(int t,int left) //t=第几个数,left=上一个数的下标(在数组里就是在它的左边)
{
for(int i=left+1;i<=n-(k-t);i++) //n-(k-t) 总数-计算的个数+现在的步数
{
a[t]=x[i];
sum+=a[t];
if(t==k)
{
if(prime(sum))
{
ans++;
}
}
else
{
dfs(t+1,i);
}
sum-=a[t];
}
}
int main()
{
scanf("%d%d",&n,&k);
for(int i=1;i<=n;i++)
{
scanf("%d",&x[i]);
}
dfs(1,0); //从第一个开始,第一个的前一个为0
cout<<ans;
}