题目描述

已知 n 个整数 x1,x2,…,xn,以及一个整数 k(k<n)。从 n 个整数中任选 k 个整数相加,可分别得到一系列的和。例如当 n=4,k=3,4 个整数分别为 3,7,12,19 时,可得全部的组合与它们的和为:

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<n)

x1,x2,…,xn (1<=xi<=5000000)

输出格式:

屏幕输出,格式为:

一个整数(满足条件的种数)。

输入输出样例

输入样例#1:

4 3
3 7 12 19
输出样例#1:

1

搜索!

思路:搞了半天没搞出样例,后来发现原来是判素数的地方出错了,ORZ。在搜索的时候我们选择倒着搜索,先搜索第k个数,再搜第k-1个(你也可以正着搜,这么开心怎么来。。。)再看看搜索的数是否为素数,就好了我们在搜完k位时,一定不要忘了判素数!!!(反正,我判素数的代码错了。。。。)代码:
#include<cmath>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
#define N 110
using namespace std;
int n,k,a[N],ans;
int read()
{
    ,f=; char ch=getchar();
    ; ch=getchar();}
    +ch-'; ch=getchar();}
    return x*f;
}
int pd(int x)
{
    ||x==) ;
    ) ;
    ;i*i<=x;i++)
     ;
    ;
}
void dfs(int k,int x,int sum)
{
    if(!k)
    {
        ans+=pd(sum);
        return ;
    }
    for(x;x<=n;x++)
     dfs(k-,x+,sum+a[x]);
}
int main()
{
    n=read();k=read();
    ;i<=n;i++) a[i]=read();
    dfs(k,,);
    printf("%d",ans);
    ;
}

 

最新文章

  1. Maven随记
  2. linux安装php &amp; nginx
  3. 手把手教你在Windows下搭建React Native Android开发环境
  4. 技术英文单词贴--D
  5. jdbc至sql server的两种常见方法
  6. C# 检测操作系统是否空闲,实现系统空闲后做一些操作
  7. ORA-01017 invalid username/password;logon denied&quot; (密码丢失解决方案)
  8. php laravel 安装
  9. 【转】jsp页面中jstl标签详解
  10. SQL Server 2008 无法保存表的更改
  11. 2016031901 - U盘安装ubuntu系统
  12. C++和java的区别
  13. SQL SERVER语句汇总
  14. 2017-1-9css
  15. Lesson 1: What is design? Why is it important?
  16. 关于C#继承运用的总结
  17. vscode中vue代码颜色插件
  18. 读取Excel,单元格内容大于255个字符自动被截取的问题
  19. 腾讯开源项目phxpaxos的编译步骤
  20. Android获取本机号码及运营商

热门文章

  1. System.Lazy&lt;T&gt;延迟加载
  2. 自制无线共享工具C++源代码及创建过程
  3. iTOP-4418/6818开发板支持双屏异显,双屏同显
  4. leetcode_1015. Numbers With Repeated Digits
  5. jQuery 点击查看 收起
  6. 【原】简单shell练习(二)
  7. Java调用WebService接口实现发送手机短信验证码功能,java 手机验证码,WebService接口调用
  8. idea cannot download sources解决办法
  9. PHP典型功能与Laravel5框架开发学习笔记
  10. PHP:图片上传