P1036
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
int a[100],n,total,m,z[100];
bool s[5000000];
int p(int n){
if(n==2)return 1;
if(n<2||n%2==0)return 0;
for(int i=3;i<=n/i;i+=2)
if(n%i==0)
return 0;
return 1;
}
void dfs(int step){
if(step==m+1){
int x=0;
for(int i=1;i<=m;i++)x+=a[i];
total+=p(x);
}
else
for(int i=1;i<=n;i++)
if(s[z[i]]==0&&(z[i]>=a[step-1]||step==1)){
a[step]=z[i];
s[z[i]]=1;
dfs(step+1);
s[z[i]]=0;
}
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)cin>>z[i];
sort(z+1,z+n+1);
dfs(1);
printf("%d",total);
return 0;
}
各位大佬,求调!!!