题目描述

已知 n个整数x1​,x2​,…,xn​,以及1个整数k(k<n)。从nn个整数中任选kk个整数相加,可分别得到一系列的和。

例如当n=4,k=3,4个整数分别为3,7,12,19时,可得全部的组合与它们的和为:

3+7+12=22

3+7+19=29

7+12+19=3

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.首先要说说如何判断质数,判断质数最通俗易懂的办法就是:

  对于一个小于num的正整数x,如果num不能整除x,则num必然不能整除num/x (num = num/x * x)。反之相同。我们又知num =√num*√num。 如果n除以大于√num的数,必得到小于√num的商,而小于√num的整数已经在2到√num的整数试过了,因为就没有必要再试(√num, num)范围内的数了。代码如下:

  注:经常会看到别人说“一个数 n 如果是合数,那么它的所有的因子不超过sqrt(n)”。这句话是错误的。举一个例子,16的因子包括了1、2、4、8,但很明显8>√16。另外,因子跟因数是不一样的,因数还会包括数本身,如16的因数为1、2、4、8、16。

  所以我们可以这样实现:

#include<cstdio>
#include<cmath>
bool ask(int x)
{
for (int i = 1 ; i <= sqrt(x) ;i ++){
if(x % i == 0){
return 0;
}
}
return 1;
}

2。由于这个题的n非常小只有20,我们考虑搜索直接暴力。

分析题意可知本题适合用深搜。

深搜代码如下:

void dfs(int step ,int sum,int cnt)
{//step为总次数,sum为当前所选数的总和 cnt为当前选的数
if(step == n+ || cnt == k){
if(cnt == k && ask(sum)){
ans ++;
}
return;
}
dfs(step + ,sum +a[i],cnt+); //选择下一个数
dfs(step + ,sum ,cnt) //不选择下一个数
return;
}

总代码:

#include <cstdio>
#include <cmath>
int n,k;
int ans;
const int N = ;
int K[N];
bool ask(int x)
{
for (int i = ;i <= sqrt(x);i ++){
if(x % i == ){
return ;
}
}
return ;
}
void dfs(int step,int sum,int cnt)
{ if((step == (n + ) )|| (cnt == k)){
if (ask(sum) && cnt == k){
ans ++;
}
return;
}
dfs(step+,sum + K[step],cnt +);//选择下个数的情况
dfs(step+,sum,cnt); //不选择下个数的情况
return;
}
int main()
{
// freopen(".in","r",stdin);
// freopen(".out","w",stdout);
scanf("%d%d",&n,&k);
for (int i = ;i <= n; i ++){
scanf("%d",&K[i]);
}
dfs(,,);
printf("%d",ans);
// fclose(stdin);
// fclose(stdout);
return ;
}

【搜索】【入门】洛谷P1036 选数的更多相关文章

  1. 洛谷P1036 选数 题解 简单搜索/简单状态压缩枚举

    题目链接:https://www.luogu.com.cn/problem/P1036 题目描述 已知 \(n\) 个整数 \(x_1,x_2,-,x_n\) ,以及 \(1\) 个整数 \(k(k& ...

  2. 洛谷 P1036 选数

    嗯.... 这种类型的题在新手村出现还是比较正常的, 但是不知道为什么它的分类竟然是过程函数与递归!!!(难道这不是一个深搜题吗??? 好吧这就是一道深搜题,所以千万别被误导... 先看一下题目: 题 ...

  3. (水题)洛谷 - P1036 - 选数

    https://www.luogu.org/problemnew/show/P1036 $n$ 才20的数据量,我当时居然还在想怎么分组组合,直接 $2^{20}$ 暴力搞就行了. $x_i $太大了 ...

  4. 洛谷——P1036 选数

    题目描述 已知 n 个整数 x1,x2,…,xn,以及一个整数 k(k<n).从 n 个整数中任选 k 个整数相加,可分别得到一系列的和.例如当 n=4,k=3,4 个整数分别为 3,7,12, ...

  5. 【洛谷P1036 选数】

    这个题显然用到了深搜的内容 让我们跟着代码找思路 #include<bits/stdc++.h>//万能头 ],ans; inline bool prime(int n)//最简单的判定素 ...

  6. 洛谷P1036.选数(DFS)

    题目描述 已知 n个整数 x1,x2,-,xn,以及11个整数k(k<n).从n个整数中任选k个整数相加,可分别得到一系列的和.例如当n=4,k=3,4个整数分别为3,7,12,19时,可得全部 ...

  7. 洛谷P1036选数(素数+组合数)

    题目链接:https://www.luogu.org/problemnew/show/P1036 主要考两个知识点:判断一个数是否为素数.从n个数中选出m个数的组合 判断一个数是否为素数: 素数一定是 ...

  8. 洛谷P1036 选数

    题目描述 已知 n 个整数 x1,x2,…,xn,以及一个整数 k(k<n).从 n 个整数中任选 k 个整数相加,可分别得到一系列的和.例如当 n=4,k=3,4 个整数分别为 3,7,12, ...

  9. 洛谷 P1036 选数【背包型DFS/选or不选】

    题目描述 已知 n 个整数 x1,x2,…,xn,以及一个整数 k(k<n).从 n 个整数中任选 k 个整数相加,可分别得到一系列的和.例如当 n=4,k=3,4 个整数分别为 3,7,12, ...

随机推荐

  1. JMeter - 如何在多个测试环境中运行多个线程组

    概述: 作为性能测试的一部分,我不得不为我们的应用程序提供各种用例/业务工作流程的性能测试脚本.当我设计我的性能测试脚本时,我将确保我有本文中提到的可重用测试脚本. JMeter - 如何创建可重用和 ...

  2. n个点的基环树数量

    某裴姓蒟蒻上午提了一个小问题(rt)..然后他升华了..升华之前感受到了神犇的力量... 方法一: g[n][k]表示n个点,k条边的无向图(不一定连通) f[n][k]表示表示n个点,k条边的无向连 ...

  3. 【ACM】阶乘之和 - 避免重复计算

    阶乘之和 时间限制:3000 ms  |  内存限制:65535 KB 难度:3   描述 给你一个非负数整数n,判断n是不是一些数(这些数不允许重复使用,且为正数)的阶乘之和,如9=1!+2!+3! ...

  4. jquery——元素节点操作

    插入节点: 1.append()和appendTo():在现存元素的内部,从后面插入元素 <script type="text/javascript"> $(funct ...

  5. dpkg dependency problems prevent configuration

    dpkg: dependency problems prevent configuration of cr3: cr3 depends on libpng12-0 (>= 1.2.13-4); ...

  6. FTP连接报530 User 用户名 cannot log in home directory inaccessible的解决方法

    在server 2003新建ftp用户并开启IIS的Ftp功能之后,有时在连接这个ftp的时候会出现530 User 用户名 cannot log in home directory inaccess ...

  7. jQuery获取url

    JS获取当前页面的URL信息 设置或获取对象指定的文件名或路径. <script> alert(window.location.pathname) </script> 设置或获 ...

  8. aspx有"记住我"的登录

    客户端 <form id="form1" runat="server"> <div> 用户名:<input type=" ...

  9. LVS 集群工作原理

    1. 集群:集群(cluster )就是一组计算机,它们作为一个整体向用户提供一组网络资源,单个计算机系统就是一个集群节点(node). 2. 集群种类: <1>. 负载均衡集群(Load ...

  10. 跨平台移动开发phonegap/cordova 3.3全系列教程-目录

    目录(更新完成后会附上源码供参考) 第一章 android平台开发 phonegap/cordova简介 1.开发环境搭建 2.helloworld 3.启动画面 4.结合asp.net/jqmboi ...