P1036 [NOIP2002 普及组] 选数
P1036 [NOIP2002 普及组] 选数
枚举每一种选数并进行素数的判断,计数。
//P1036 选数
#include<iostream>
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<<ans<<endl;
}
浙公网安备 33010602011771号