(开了O2)代码已经AC,但是一个很诡异的事情是,ans的值会在执行完欧拉筛后自己变成1,如果没有34行的手动初始化答案就会全部加1。求调,谢谢:)
--
#include<iostream>
#include<bitset>
using namespace std;
int n,k,primes[80000000],cnt,a[25],b[25],ans;
bitset<100000000> vis;
void dfs(int start,int cnt){
if(cnt<=0){
int sum=0;
for(int i=k;i>=1;i--) sum+=a[b[i]];
if(!vis[sum]){
ans++;
}
return;
}
for(int i=start;i<n;i++){
b[cnt]=i;
dfs(i+1,cnt-1);
}
}
int main(){
vis[1]=1;
for(int i=2;i<=100000000;i++){
if(!vis[i]) primes[cnt++]=i;
for(int j=0;j<cnt;j++){
if(i*primes[j]>100000000) break;
vis[i*primes[j]]=1;
if(i%primes[j]==0) break;
}
}
cin>>n>>k;
for(int i=0;i<n;i++) cin>>a[i];
ans=0;
dfs(0,k);
cout<<ans;
return 0;
}