这道题运用了排列类型的dfs,同时要注意写判断一个数是否为素数的函数时,要想到素数的性质,只要被1到它本身之间的任何一个数除尽就要返回0,只有前面的语句全部执行完了,最后才能返回1。在dfs函数中,我们要用一个数组q将下标i和qi的值联系起来,求出和,在判断是否为素数。
#include<stdio.h>
#include<math.h>
int n,k,a[100],ans,q[100];
int is_Prime(int num)
{
if(num<2)
return 0;
for(int i=2;i<=sqrt(num);i++)
{
if(num%i==0)
return 0;
}
return 1;
}
void dfs(int x,int start)
{
if(x>k)
{
int sum=0;
for(int i=1;i<=k;i++)
{
sum=sum+a[i];
}
if(is_Prime(sum))
ans++;
return;
}
for(int i=start;i<=n;i++)
{
a[x]=q[i];
dfs(x+1,i+1);
}
}
int main()
{
scanf("%d %d",&n,&k);
for(int i=1;i<=n;i++)
scanf("%d",&q[i]);
dfs(1,1);
printf("%d\n",ans);
return 0;
}