0
已解决
李显晨
中级启示者
中级启示者
#include<iostream>
#include<algorithm>
#include<cmath>
using namespace std;
int n,cnt,ans[24000000],k,a[24000000];
bool vis[24000000];
bool zs(int n){
if(n==1) return 0;
for(int i=2;i<=sqrt(n);i++){
if(n%i==0) return 0;
}
return 1;
}
bool pd(int x){
int sum=0;
for(int i=1;i<x;i++) sum+=ans[i];
if(zs(sum)) return 1;
return 0;
}
void dfs(int x){
if(x>k){
if(pd(x)) cnt++;
return;
}
for(int i=1;i<=n;i++){
if(!vis[a[i]]){
ans[x]=a[i];
vis[a[i]]=1;
dfs(x+1);
vis[a[i]]=0;
}
}
}
int main(){
cin>>n>>k;
for(int i=1;i<=n;i++) cin>>a[i];
dfs(1);
cout<<cnt;
return 0;
}
样例不对啊!求大佬找错
李显晨在2021-10-09 17:39:08追加了内容
#include<iostream>
#include<algorithm>
#include<cmath>
using namespace std;
int n,cnt,ans[24000000],k,a[24000000];
bool vis[24000000];
bool zs(int n){
if(n==1) return 0;
for(int i=2;i<=sqrt(n);i++){
if(n%i==0) return 0;
}
return 1;
}
bool pd(int x){
int sum=0;
for(int i=1;i<x;i++) sum+=ans[i];
if(zs(sum)) return 1;
return 0;
}
void dfs(int x,int pos){
if(x>k){
if(pd(x)) cnt++;
return;
}
for(int i=pos+1;i<=n;i++){
ans[x]=a[i];
dfs(x+1,pos+1);
}
}
int main(){
cin>>n>>k;
for(int i=1;i<=n;i++) cin>>a[i];
dfs(1,0);
cout<<cnt;
return 0;
}
不对啊!@曹博扬