// P1706 全排列问题
// 按照字典序输出自然数 1 到 n 所有不重复的排列,即 n 的全排列,要求所产生的任一数字序列中不允许出现重复的数字。
#include <bits/stdc++.h>

inline bool isprime(int x) { 
if (x == 1) return false; // 注意这步特判是必需的
for (int i = 2; i * i <= x; ++i)
if (x % i == 0)
return false;
return true;
}

const int N = 25;
int a[N], ans, n, k;

void dfs(int now, int sum, int sid) {
// 现在已经选了 now 个数,当前总和为 sum
// sid 是这次选数的起始下标,即我们从 a[sid] 开始选数枚举
if (now == k) {
if (isprime(sum))
++ans;
return ;
}
for (int i = sid; i <= n - k + now + 1; ++i)
dfs(now + 1, sum + a[i], i + 1);
return ;
}

int main() {
scanf("%d%d", &n, &k);
for (int i = 1; i <= n; ++i)
scanf("%d", &a[i]);
dfs(0, 0, 1);
printf("%d\n", ans);
return 0;
}
全部评论

相关推荐

12-08 15:35
浙江大学 Java
点赞 评论 收藏
分享
10-25 22:20
门头沟学院 Java
代码飞升_不回私信人...:同学院本,个人亮点去了,打招呼里面的废话也去了,学院本就是路边一条,明天拉满然后该学还是学,小厂也行尽量先有一段实习。另外你的项目描述写的不好,具体列一下可被提问的点,然后量化一下指标或者收益吧
投了多少份简历才上岸
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务