#include <stdio.h>
#include <math.h>
#define MAX_LEN 500
int input[MAX_LEN];
int output[MAX_LEN];
int n, m;
int prime_number_cnt = 0;
void get_input ()
{
int i;
scanf("%d", &n);
scanf("%d", &m);
for (i = 0; i < n; i++)
{
scanf("%d", &input[i]);
}
}
int prime_number (int input)
{
int i, k;
k = sqrt(input);
for(i = 2; i <= k; i++)
{
if(input % i == 0)
break;
}
if(i > k)
return 0;
else
return -1;
}
void combine (int a[], int n, int m, int b[], const int M )
{
int i, j, sum, ret;
for (i = n; i >= m; i--) // 注意这里的循环范围
{
b[m-1] = i - 1;
if (m > 1)
{
combine(a, i-1, m-1, b, M);
}
else // m == 1, 输出一个组合
{
sum = 0;
for (j = 0; j < M; j++)
{
//printf ("%d ", a[b[j]]);
sum += a[b[j]];
}
//printf ("sum = %d\n", sum);
ret = -1;
ret = prime_number (sum);
if (0 == ret)
{
prime_number_cnt++;
}
}
}
}
int main()
{
get_input();
combine (input, n, m, output, m);
printf ("%d", prime_number_cnt);
}
#include <math.h>
#define MAX_LEN 500
int input[MAX_LEN];
int output[MAX_LEN];
int n, m;
int prime_number_cnt = 0;
void get_input ()
{
int i;
scanf("%d", &n);
scanf("%d", &m);
for (i = 0; i < n; i++)
{
scanf("%d", &input[i]);
}
}
int prime_number (int input)
{
int i, k;
k = sqrt(input);
for(i = 2; i <= k; i++)
{
if(input % i == 0)
break;
}
if(i > k)
return 0;
else
return -1;
}
void combine (int a[], int n, int m, int b[], const int M )
{
int i, j, sum, ret;
for (i = n; i >= m; i--) // 注意这里的循环范围
{
b[m-1] = i - 1;
if (m > 1)
{
combine(a, i-1, m-1, b, M);
}
else // m == 1, 输出一个组合
{
sum = 0;
for (j = 0; j < M; j++)
{
//printf ("%d ", a[b[j]]);
sum += a[b[j]];
}
//printf ("sum = %d\n", sum);
ret = -1;
ret = prime_number (sum);
if (0 == ret)
{
prime_number_cnt++;
}
}
}
}
int main()
{
get_input();
combine (input, n, m, output, m);
printf ("%d", prime_number_cnt);
}