简洁易懂带注释代码
2026-02-13 09:02:50
发布于:上海
10阅读
0回复
0点赞
题目说要从n个数中选k个数,算出这k个数和,求这些和中素数个数。
本题是典型的“n选k”问题。先递归枚举选数的所有可能,再进行判断其和是否是质数。
#include<bits/stdc++.h>
using namespace std;
int n, k, ans, sum;
int x[22], m[22];
bool ip(int num){//判断素数
if(num < 2){
return false;
}
for(int i = 2; i * i <= num; i++){
if(num % i == 0){
return false;
}
}
return true;
}
void dfs(int p){
if(p == k + 1){//触碰了边界条件————验证素数
if(ip(sum)){
ans++;
}
return;
}
for(int i = m[p - 1] + 1; i <= n; i++){
m[p] = i;//存储当前选数
sum += x[i];//求和
dfs(p + 1);
sum -= x[i];
}
}
int main(){
cin >> n >> k;
for(int i = 1; i <= n; i++){
cin >> x[i];
}
dfs(1);
cout << ans;
return 0;
}
全部评论 1
制作不易,留赞后去
2026-02-13 来自 上海
0






有帮助,赞一个