完全没有考虑值大于5000000时是否为质数。
hack数据:
3 2
500000 4000000 3000000
//错误程序,但仍能通过此题
#include <iostream>
using namespace std;
const int N = 22;
int a[N];
bool isPrime(int n){
if(n >= 5000000) return 0; //==
if (n <= 1 || n == 4) return 0;
if (n == 2 || n == 3) return 1;
if (n % 6 != 1 && n % 6 != 5) return 0;
for (int i = 5; i <= n/i; i += 6) {
if (n % i == 0 || n % (i + 2) == 0) return 0;
}
return 1;
}
int main(){
int n,m;cin >> n >> m;
for(int i = 0;i < n;i++){
cin >> a[i];
}
int ans = 0;
for(int i = 1;i < 1 << n;i++){
int now = 0;
int cnt = 0;
for(int k = 0;k < n;k++){
if(i >> k & 1) {
cnt++;
now += a[k];
}
}
if(cnt == m) {
if(isPrime(now)) ans++;
}
}
cout << ans;
}