2025 8 14 XP03 二进求质3
原题链接:31280.简简单单!2025-08-14 11:08:03
发布于:浙江
#include <bits/stdc++.h>
using namespace std;
int n,ans,a[20];
bool check(int x){
if (x <= 1) return false;
for (int i = 2;i*i <= x;i++){
if (x % i == 0) return false;
}
return true;
}
int main()
{
cin >> n;
for (int i = 0;i < n;i++)
cin >> a[i];
for (int i = 1;i < (1 << n);i++){//2的n次方种可能
//每个i的二进制表示对应一个选择方案
//i=5(101)表示选择第0个和第2个 2进制枚举
int sum = 0;
for (int j = 0;j < n;j++){//总共n个数,检查i的每一位
//1<<j表示生成一个只有第j位为1的二进制
//表示第j个数字选择了其他位都不选
//1&1=1,这时候i的第j位如果也是1则表示选择,进行累加
if (i & (1 << j)) sum += a[j];
}
if (check(sum)) ans++;
}
cout << ans << endl;
return 0;
}
这里空空如也
有帮助,赞一个