题目
分析
我们进行深搜,对于一个数,要么选,要么不选。
注意和最大是1亿,判素数不能用筛法,而且需要优化
代码
#include<iostream>
using namespace std;
int n, k;
int a[36];
int s, ans;
bool prime(int n)//判断n是不是质数
{
for (int i = 2; i <= n / i; i++)
{
if (n % i == 0)
return false;
}
return true;
}
//看第i个数,还剩m个数
void dfs(int i, int m)
{
if (m == 0) //选完
{
if (prime(s)) ans++;
return;
}
if (n - i + 1 < m)//剪枝
return;
dfs(i + 1, m);//不选
// 选
s += a[i];
dfs(i + 1, m - 1);
s -= a[i];
}
int main()
{
cin >> n >> k;
for (int i = 1; i <= n; i++) cin >> a[i];
dfs(1, k);
cout << ans << endl;
return 0;
}