【问题】计算出n个整数中任选k个整数的和为素数的组合共有多少种?
【例如】
4 3
3 7 12 19
【输出】
1
【解析】
这一题用深搜遍历。
利用深度优先搜索递归的思路来遍历,在n个数里选k个,n个数存放在一个数组里,递归所有可能的情况,然后判断是否为素数,这就是本题核心。
因此递归函数DFS有三个参数,index是第Index个数,nowK是当前选择的个数,sum是当前已选数字之和。
#include<iostream>
using namespace std;
int n, k, nums[10], sum, res;
int sushunums(int num)
{
if (num < 2) return 0;
for (int i = 2; i * i < num; i++)
{
if( num % i == 0)
{
return 0;
}
}
return 1;
}
void dfs(int index, int nowk, int sum)
{
if (nowk == k)
{
if (sushunums(sum))
res++;
return;
}
if (index == n || nowk > k