1 //使用数组input保存各个数字是否被用过的标志,使用数组a保存输入的数字
2 #include <stdio.h>
3 #include <math.h>
4 #include <string.h>
5 int sort=0,n,k,a[40];
6 int sushu(int x) //是素数返回1,不是返回0
7 {
8 int i,y;
9 y=sqrt(x);
10 for(i=2;i<=y;i++)
11 if(x%i==0)
12 return 0;
13 return 1;
14 }
15 void f(int input[],int pos,int m) //f(被操作数组,所在位置,选m个数)
16 {
17 if(m==0)
18 {
19 int j,sum=0;
20 for(j=0;j<n;j++)
21 if(input[j]==1)
22 sum+=a[j];
23 if(sushu(sum)==1)
24 sort++;
25 return;
26 }
27 else
28 {
29 int i;
30 for(i=pos;i<n;i++)
31 {
32 if(input[i]==0)
33 input[i]=1;
34 f(input,i+1,m-1);
35 input[i]=0;
36 }
37 }
38 return;
39 }
40 int main()
41 {
42 int input[40],i;
43 scanf("%d%d",&n,&k);
44 for(i=0;i<n;i++)
45 scanf("%d",&a[i]);
46 memset(input,0,sizeof(int)*40);
47 f(input,0,k);
48 printf("%d\n",sort);
49 return 0;
50 }