#include<bits/stdc++.h> #define endl '\n' usingnamespace std; longlong n, k, ans, a[25]; boolcheck(longlong x)// 判断 x 是否为质数 { for (longlong i = 2; i * i <= x; i++) // 避免使用 sqrt() 函数,减少精度误差 { if (x % i == 0) // 等同于 x % i == 0 returnfalse; } returntrue; } voiddfs(longlong m, longlong s, longlong x)// m:选的数个数,s:当前的和,x:下一个选的数的位置 { if (m == k) { if (check(s)) // 如果当前的和是质数,则 ans++ ans++; return; } for (longlong i = x; i < n; i++) // 从 x 开始 dfs(m + 1, s + a[i], i + 1); return; }
intmain() { cin >> n >> k; for (longlong i = 0; i < n; i++) cin >> a[i]; dfs(0, 0, 0); // 初始状态:选的数个数为 0,当前的和为 0,下一个选的数的位置为 0 cout << ans << endl; return0; }