代码如下:
#include <iostream>
#include <cmath>
#include <cstdio>
using namespace std;
int n, m, a[21] = {}, c[21] = {}, total, ans = 0;
bool b[21] = {}, ac[500001] = {};
bool isPrime(int a){
for(int i = 2; i <= sqrt(a); i++){
if(a % i == 0){
return false;
}
}
return true;
}
void search(int k){
for(int i = 1; i <= n; i++){
if(!b[i]){
c[k] = a[i];
b[i] = true;
if(k == m){
total = 0;
for(int i = 1; i <= m; i++){
total += c[i];
}
if(isPrime(total)){
if(!ac[total]){
ans++;
ac[total] = true;
}
}
} else {
search(k + 1);
}
b[i] = false;
}
}
}
int main(){
scanf("%d%d", &n, &m);
for(int i = 1; i <= n; i++){
scanf("%d", &a[i]);
}
search(1);
printf("%d", ans);
return 0;
}