解法一:
#include<cstdio>
using namespace std;
int a[30];
bool check(int x)
{
for(int i=2;i*i<=x;++i)
if(x%i==0) return 0;
return 1;
}
int main()
{
int n,k,ans=0;
scanf("%d%d",&n,&k);
for(int i=0;i<n;++i)scanf("%d",&a[i]);
int U=1<<n;
for(int S=0;S<U;++S)
{
int cnt=0,sum=0;
for(int i=0;i<n;++i)
if(S&(1<<i))
{
cnt++;
sum+=a[i];
}
if(cnt==k)
{
if(check(sum)) ans++;
}
}
printf("%d\n",ans);
return 0;
}
解法二:
#include<cstdio>
using namespace std;
int a[30];
bool check(int x)
{
for(int i=2;i*i<=x;++i)
if(x%i==0) return 0;
return 1;
}
int main()
{
int n,k,ans=0;
scanf("%d%d",&n,&k);
for(int i=0;i<n;++i)scanf("%d",&a[i]);
int U=1<<n;
for(int S=0;S<U;++S)
if(__builtin_popcount(S)==k)
{
int sum=0;
for(int i=0;i<n;++i)
if(S&(1<<i)) sum+=a[i];
if(check(sum)) ans++;
}
printf("%d\n",ans);
return 0;
}