洛谷-P1036 选数

题目描述

已知 n 个整数x1​,x2​,…,xn​,以及1个整数k(k

3+7+12=22

3+7+19=29

7+12+19=38

3+12+19=34。

现在,要求你计算出和为素数共有多少种。

例如上例,只有一种的和为素数:3+7+19=29。

输入输出格式

输入格式:

 

键盘输入,格式为:

n,,k(1≤n≤20,k

x1​,x2​,…,xn​(1≤xi​≤5000000)

 

输出格式:

 

屏幕输出,格式为: 11个整数(满足条件的种数)。

 

输入输出样例

输入样例#1: 

4 3
3 7 12 19

输出样例#1: 

1

题解:简单的递归

 

#include 
#include 
#include 

using namespace std;

int a[25];
int n,k,num;

bool isprime(int ans)
{
    for (int i = 2; i*i <= ans; i++)
    {
        if (ans % i == 0)
        {
            return false;
        }
    }
    return true;
}

void fun(int ans,int deep,int pos)
{
    if(deep==k)
    {
        if(isprime(ans))
            num++;
        return;
    }
    for(int i=pos;i<=n;i++)
        fun(ans+a[i],deep+1,i+1);
}


int main()
{
    cin>>n>>k;
    num=0;
    for(int i=1;i<=n;i++)
    {
        cin>>a[i];
    }
    fun(0,0,1);
    cout<

 

 

 

 

你可能感兴趣的:(从零开始的acm刷题)