组合问题
代码:
#include <bits/stdc++.h> using namespace std; const int maxn = 25; int n, k; int a[maxn]; bool sushu(int o) { if (o == 1) return false; if (o == 2) return true; for (int i = 2; i <= o - 1; i++) { if (o % i == 0) return false; } return true; } int ans = 0; int num = 0; void f(int x, int start) // 已经选了x个数,现在位置是start { if (x > k) { // 选完了 一定要>k!!!!! if (sushu(ans)) { num++; } return; } for (int i = start; i <= n; i++) { ans += a[i]; f(x + 1, i + 1); ans -= a[i]; } } int main() // 依次枚举每个数放哪个位置 { cin >> n >> k; for (int i = 1; i <= n; i++) { cin >> a[i]; } f(1, 1); // 开始选第一个数字, 从第一个位置开始 cout << num; return 0; }