1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66
| #include<bits/stdc++.h> using namespace std;
int n,m; int ans; const int N=50;
int haduse[N]; int num[N];
bool isprime(int num) { for(int i=2;i<=sqrt(num);i++) { if(num%i==0) return false;
} return true; }
void dfs(int u,int start) { if(u==m+1) { int sum=0; for(int i=1;i<=m;i++) { sum+=num[haduse[i]]; if(i==m) { if(isprime(sum)) ans++; } } return; } for(int i=start; i<=n;i++) { haduse[u]=i; dfs(u+1,i+1);
haduse[u]=0; }
}
int main() { cin>>n>>m; for(int i=1;i<=n;i++) { cin>>num[i];
} dfs(1,1); cout<<ans<<endl;
}
|