题目链接:https://www.luogu.org/problemnew/show/P1036

主要考两个知识点:判断一个数是否为素数、从n个数中选出m个数的组合

判断一个数是否为素数:

素数一定是6n+1或者6n-1

如果是6n,则可以被6整除

如果是6n+2,可以被2整除

如果是6n+3,可以被3整除

如果是6n+4,可以被2整除

而6n+5等同于6n-1

组合数:

参考博客:https://zhidao.baidu.com/question/487981533.html

采用递归,从n个数里选出下标最大的一个数,从n-1个数里再选出下标最大的一个数,直到剩余n-m+1个数,再选出最后一个

如此反复,直到最大的下标为m

代码如下:

#include<cstdio>
#include<cmath>
#define MAXN 500
using namespace std; int M;
int cnt; bool isPrime(int num)
{
if(num <= ){
return num > ;
} if(num % != && num % != ){
return false;
}
int x = (int)sqrt(num);
for(int i = ; i <= x; i += ){
if(num % i == || num % (i+) == ){
return false;
}
}
return true;
} void combine(int a[], int n, int m, int b[])
{
for(int i = n; i >= m; i--){
b[m-] = i-;//b数组存储的是元素下标
if(m > ){
combine(a, i-, m-, b);
}
else{
int sum = ;
for(int j = M-; j >= ; j--){
sum += a[b[j]];
} if(isPrime(sum)){
cnt ++;
}
}
}
} int main()
{
int n, m;
scanf("%d%d", &n, &m);
M = m;
int a[], b[];
for(int i = ; i < n; i++){
scanf("%d", &a[i]);
}
combine(a, n, m, b);
printf("%d\n", cnt); return ;
}

有任何疑问请站内联系或者邮箱:zhuo2333@qq.com

洛谷P1036选数(素数+组合数)的更多相关文章

  1. 【搜索】【入门】洛谷P1036 选数

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

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

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

  3. 洛谷 P1036 选数

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

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

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

  5. 洛谷P1036.选数(DFS)

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

  6. 洛谷——P1036 选数

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

  7. 【洛谷P1036 选数】

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

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

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

  9. 洛谷P1036 选数

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

随机推荐

  1. C# 编译运行原理

  2. 【Linux】日志分析工具grep sed sort

    遇到一个问题,在查询日志时发现,服务器上打印的文件有很多个,每个都存储了一部分日志, 需要将日志按照时间排序,并显示所有日志. 原命令: grep -h  searchContent */*log 搜 ...

  3. Egg.js

    一.Egg简介绍 Express和Koa缺少约定,缺少规范,Eggjs对MVA进行约定规范,为企业框架而生. 特性: 基于Egg定制上层框架. 高度可扩展插件机制. 内置多进程管理.对比Nodejs. ...

  4. pg数据库查询表大小

    查询单个表 select pg_size_pretty(pg_relation_size('table_name')); 按size大小排序列出所有表 SELECT table_schema || ' ...

  5. 2018-2019 20165239 Exip MSF基础应用

    实践内容(3.5分) 本实践目标是掌握metasploit的基本应用方式,重点常用的三种攻击方式的思路.具体需要完成: 1.1一个主动攻击实践,如ms08_067; (1分) 1.2 一个针对浏览器的 ...

  6. AtCoder Grand Contest 031 (AGC031) D - A Sequence of Permutations 其他

    原文链接https://www.cnblogs.com/zhouzhendong/p/AGC031D.html 前言 比赛的时候看到这题之后在草稿纸上写下的第一个式子就是 $$f(p,q) = pq^ ...

  7. Mysql学习笔记03

    Mysql 的视图 1  view  在查询中,我们经常把查询结果当成临时表来看, view 是什么? View 可以看成一张虚拟的表,是表通过某种运算得到的有一个投影. 2 如何创建视图? 创建视图 ...

  8. input里面的submit鼠标按钮属性cursor

    属性cursor 属性值: pointer  小手 move  移动 help 帮助 wait 等待

  9. PBRT笔记(11)——光源

    自发光灯光 至今为止,人们发明了很多光源,现在被广泛使用的有: 白炽灯的钨丝很小.电流通过灯丝时,使得灯丝升温,从而使灯丝发出电磁波,其波长的分布取决于灯丝的温度.但大部分能量都被转化为热能而不是光能 ...

  10. kali安装vm tools

    kali安装完毕后第一件事便是安装VMtools,tools能让kali和物理机进行交互,复制粘贴功能等. 在屏幕上会弹出一个光驱,点击进去,进入文件夹 将文件复制到home文件夹下. 1 tar z ...