1.首先,使用 mask 表示 2^n 种可能的组合。
2.对于 mask 的每一个值,使用位运算 (i >> j) & 1 来检查第 j 个元素是否被选中。
3.计算选中元素的数量 bitCount 和它们的和 sum。
4.检查 bitCount 是否等于 k 并且 sum 是否为素数,如果是,将 count 加 1。
5.最后输出满足条件的组合数 核心代码1:
for (int i = 0; i < mask; i++) {
int bitCount = 0; // 记录当前组合的元素数量
int sum = 0; // 计算当前组合的元素和
for (int j = 0; j < n; j++) {
if ((i >> j) & 1) {
bitCount++;
sum += nums[j];
}
}
核心代码2:
bool isPrime(int num) {
if (num <= 1) return false;
if (num == 2) return true;
if (num % 2 == 0) return false;
int sqrtNum = sqrt(num);
for (int i = 3; i <= sqrtNum; i += 2) {
if (num % i == 0) return false;
}
return true;
}