#include <iostream>
#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;
cin >> 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++;
}
cout << ans;
return 0;
}
}
不明白为什么要S & (1 << i),&代表集合。
还有,为什么1 << n 就是U的全集了。
一直没想明白,谢谢解答!