#include<iostream>
#include<cmath>
using namespace std;
int n,k;
int a[5000001];
int ans=0;
bool vis[21];
int p[21];
int sum;
bool isPrime(int x){
for(int i=2;i<=sqrt(x);i++){
if(x%i==0) return false;
}
return true;
}
void dfs(int x){
if(x==k+1){
//cout<<endl;
if(isPrime(sum)){
ans++;
}
return;
}
for(int i=1;i<=n;i++){
if(!vis[i] && i>p[x-1]){//p[x-1]:第x-1个位置上的数字,i>p[x-1]保证一组加数升序排列(目的是不重复,顺序不同的按一组计)
p[x]=i;
//cout<<a[i]<<" ";
sum+=a[i];
vis[i]=true;
dfs(x+1);
sum-=a[i];
vis[i]=false;
}
}
return;
}
int main()
{
cin>>n>>k;
for(int i=1;i<=n;i++){
cin>>a[i];
//p[i]=i;
}
dfs(1);
cout<<ans<<endl;
return 0;
}
洛谷P1036 [NOIP2002 普及组] 选数
最新推荐文章于 2024-04-16 21:38:35 发布