题目链接
思路:
1.构造一个函数用来检查最后的答案是不是素数
( 素数是指只能被1和自身整除的数 )
2.造一个能选择的递归的函数
A.终止条件: 选够了数或者已经没数可选了
a:判断是不是素数,是就+1
B.选择当前的数
C.不选择
#include<iostream>
#include<cmath> //sqrt()函数的头文件,sqrt 是用来平方根的
using namespace std;
int n,l;
int a[100];
int ans=0;
int check(int h) //用来判断素数的函数
{
int b=1;
for(int i=2;i<=sqrt(h);i++)
if(h%i==0) { b=0; break;} //不满足定义就为错,然后结束
else {b=1;}
return b; //返回它的真假
}
void dg(int num,int res,int k ) //选与不选的函数
{
if(num==l||k==n) //结束条件,我看了一些大佬的视频,他们一般推荐终止条件放在前面
{
if( check(res)==1&&num==l)
ans++; //选够了和满足为素数就加一
return ; //有没有大佬告诉我为什么要加return
}
dg(num+1,res+a[k],k+1);
dg(num,res,k+1);
return ; //有没有大佬告诉我为什么要加return
}
int main()
{
cin>>n>>l;
for(int i=0;i<n;i++)
cin>>a[i];
dg(0,0,0);
cout<<ans; //最重要的一步,输出答案
return 0;
}