Codevs1008 选数 2002年NOIP全国联赛普及组
#include <cstdio>
#include <cstring>
#include <iostream>
#include <cstdlib>
#include <algorithm>
#include <cmath>
using namespace std;
int n, k;
int num[25];
bool Judge(int x)
{
if(x <= 1) return false;
if(x <= 3) return true;
for(int i = 2; i <= sqrt(x); ++ i)
if(x%i == 0)
return false;
return true;
}
int ans = 0;
void dfs(int sum, int x, int last)
{
if(x == k)
{
if(Judge(sum)) ++ ans;
return;
}
for(int i = last+1; i <= n; ++ i)
dfs(sum+num[i], x+1, i);
}
int main()
{
cin >> n >> k;
for(int i = 1; i <= n; ++ i)
scanf("%d", &num[i]);
dfs(0,0,0);
cout << ans << endl;
return 0;
}