#include <iostream>
using namespace std;
int n, k, a[100010], c[100010], cnt = 0;
bool isPrime(int x)
{
if (x < 2) return false;
for (int i = 2; i * i <= x; i++)
{
if (x % i == 0)
{
return false;
}
}
return true;
}
bool check()
{
int s = 0;
for (int i = 1; i <= n; i++)
{
if (a[i] == 1) s += c[i];
}
return isPrime(s);
}
void dfs(int step, int sum)
{
if (step > n && sum < k) return;
if (sum == k)
{
if (check()) cnt++;
return;
}
a[step] = 0;
dfs(step + 1, sum);
a[step] = 1;
dfs(step + 1, sum + 1);
}
int main()
{
cin >> n >> k;
for (int i = 1; i <= n; i++)
{
cin >> c[i];
}
dfs(1, 0);
cout << cnt << endl;
return 0;
}
大佬看一下哪错了
谢谢