全排列+素数判定
直接枚举
#include<bits/stdc++.h>
using namespace std;
int n,k;
int a[30],book[21];//a数组保存,book标记
int c[21],s;
bool ss(int x)//素数函数
{
    if(x<2)
        return false;
    for(int i=2;i<=sqrt(x);i++)
        if(x%i==0)
            return false;
    return true;
}
void dfs(int step)//全排列模板
{
	if(step==k+1)//判定保存数据是否通过
	{
		for(int i=1;i<=k;i++)
			if(c[i]<c[i-1])//去重
				return ;
        int ans=0;
		for(int i=1;i<=k;i++)
            ans+=a[c[i]];
        if(ss(ans))//判定是否是素数
            s++;
		return ;
	}
    for(int i=1;i<=n;i++)
    {
   		if(book[i]==0)//搜索+回溯
		{
			c[step]=i,book[i]=1;
			dfs(step+1);
			book[i]=0;
		}
	}
}
int main() 
{
    cin>>n>>k;
    for(int i=1;i<=n;i++)
        cin>>a[i];//输入
    dfs(1);
    cout<<s<<endl;
}