P1036 选数 【洛谷】

原题链接

-------------------------------------------------------------------------------------------------------------------

 

#include <bits/stdc++.h>
using namespace std;
int n,k,sum,x[25],a[25],ans;
bool prime(int n)		//判断一个数是否为质数
{
	int len=sqrt(n);
	for(int i=2; i<=len; i++)
	{
		if(n%i==0)
		{
			return 0;
		}
	}
	return 1;
}
int dfs(int t,int left)		//t=第几个数,left=上一个数的下标(在数组里就是在它的左边) 
{
	for(int i=left+1;i<=n-(k-t);i++)	//n-(k-t) 总数-计算的个数+现在的步数 
	{
		a[t]=x[i];
		sum+=a[t];
		if(t==k)
		{
			if(prime(sum))
			{
				ans++;
			} 
		}
		else
		{
			dfs(t+1,i);
		} 
		sum-=a[t];
	} 
} 
int main()
{
	scanf("%d%d",&n,&k);
	for(int i=1;i<=n;i++)
	{
		scanf("%d",&x[i]);
	}
	dfs(1,0); //从第一个开始,第一个的前一个为0 
	cout<<ans;
}
原文地址:https://www.cnblogs.com/BorisDimitri/p/13546614.html