Files
python/TangDou/LuoGuBook/P1036.cpp
HuangHai 1f397eca87 'commit'
2025-08-30 18:35:01 +08:00

35 lines
1.0 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include <bits/stdc++.h>
using namespace std;
const int N = 30;
int a[N];
//是不是质数
bool isPrime(int n) {
for (int i = 2; i <= n / i; i++)
if (n % i == 0) return false;
return true;
}
int main() {
int n, k, ans = 0;
cin >> n >> k;
for (int i = 0; i < n; i++) scanf("%d", &a[i]);
int U = 1 << n; //U-1即为全集 ,比如 1<<5 就是 2的5次方,就是32,U=32。而U-1=31,就是表示 1 1 1 1 1
for (int S = 0; S < U; S++) { //枚举所有子集[0,U)
//找到k元子集
if (__builtin_popcount(S) == k) {
int sum = 0;
//是哪些数存在于子集中呢?
for (int i = 0; i < n; i++) {
int bit = (S >> i) & 1;
if (bit) sum += a[i]; //遍历数字S的每一位,如果不是0,表示这一位上的数字是存在的,需要加进来
}
//判断子集元素和是不是素数
if (isPrime(sum)) ans++;
}
}
cout << ans << endl;
return 0;
}