#include

#include

using namespace std;

const int N = 5000010;

int n, k, x[25], ans = 0, count = 0;

bool v[N] = {0};

bool isPrime(int x)

{

if(x <= 3) return true;

if(x % 2 == 0) return false;

int q = sqrt(x) + 1;

for(int i = 3;i <= q; i += 2)

{

if(x % i == 0) return false;

}

return true;

}

// i表示当前在考虑第i个数

// sum表示当前选择的所有数的和

// count表示目前选择了几个数

void dfs(int i, int sum, int count)

{

if(count == k && isPrime(sum))

{

++ans;

return;

}

if(i > n)

return; // 选的数量不合适则return

dfs(i+1, sum+x[i], 1+count); // 选当前的数

dfs(i+1, sum, count); // 跳过当前的数

}

int main()

{

cin>>n>>k;

for(int i=1;i<=n;++i) cin>>x[i];

dfs(1, 0, 0);

cout<

return 0;

}

参考阅读

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。