#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; } 参考阅读
发表评论