P1036 [NOIP2002 普及组] 选数


P1036 [NOIP2002 普及组] 选数
枚举每一种选数并进行素数的判断,计数。

//P1036 选数
#include
using namespace std;
long long ans=0;
int a[21];
int n,k;
//判断素数
int isprime(int x)
{
	if (x<2) return 0;
	for (int i=2;i*i<=x;i++)
	{
		if (x%i==0) return 0;
	}
	return 1;
}
//k表示选择的个数,p当前是第几个数,sum:当前所选择数的和
void dfs(int k,int p,int sum)
{
	if (!k) {
		ans+=isprime(sum);
		return ;
	}
	for (p;p<=n;p++) dfs(k-1,p+1,sum+a[p]);
}
int main()
{
	cin>>n>>k;
	for (int i=1;i<=n;i++)
	{
		cin>>a[i];
	}
	dfs(k,1,0);
	cout<