用了深基的代码,没有过,此外还有点问题
查看原帖
用了深基的代码,没有过,此外还有点问题
532067
rochcim楼主2021/8/25 23:35
#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的全集了。
一直没想明白,谢谢解答!
2021/8/25 23:35
加载中...