#include<iostream>
#include<cmath>
using namespace std;
int n, k, x[21], num;
bool prime(int n)
{
if (2 == n)
return true;
else if (0 == n % 2)
return false;
else
for (int i = 3; i <= sqrt(n); i += 2)
if (0 == n % i)
return false;
return true;
}
void depth_first_search(int total_value, int position, int total_number)
{
if (position >= n)
return;
else if (k == total_number && prime(total_value))
num++;
else
for (int i = position + 1; i < n; i++)
depth_first_search(total_value + x[i], i, total_number + 1);
}
int main()
{
cin >> n >> k;
for (int i = 0; i < n; i++)
cin >> x[i];
depth_first_search(0, -1, 0);
cout << num;
return 0;
}
洛谷P1036 [NOIP2002 普及组] 选数进阶解法
最新推荐文章于 2024-08-15 22:49:15 发布
该程序采用深度优先搜索算法,寻找一个整数数组中,和为给定值且所有数字组合成的数是素数的子集。输入包括数组长度和目标和,然后遍历数组进行递归搜索,最后输出符合条件的素数子集组合的数量。
1745

被折叠的 条评论
为什么被折叠?



