P1036 [NOIP 2002 普及组] 选数
这是一道典型的用dfs写k次循环
P1036 [NOIP 2002 普及组] 选数 - 洛谷
#include <bits/stdc++.h>
using namespace std;
const int N = 1e7 + 10;
#define ll long long
int n,k;
int a[N];
ll res;
bool isprime(int x)
{if(x==1 || x!=2 && x%2==0) return false;for(int i=3;i*i<=x;i++)if(x%i==0) return false;return true;
}
void dfs(int m,int s,int x)
{if(m==k){if(isprime(s)) res++;return;}for(int i=x;i<n;i++)dfs(m+1,s+a[i],i+1);
}
int main()
{cin>>n>>k;for(int i=0;i<n;i++) cin>>a[i];dfs(0,0,0);cout<<res;return 0;
}