笔记---容斥原理

AcWing,890.能被整除的数
给定一个整数 n n n m m m 个不同的质数 p 1 , p 2 , … , p m p_{1},p_{2},…,p_{m} p1,p2,,pm

请你求出 1 ∼ n 1∼n 1n 中能被 p 1 , p 2 , … , p m p_{1},p_{2},…,p_{m} p1,p2,,pm 中的至少一个数整除的整数有多少个。

输入格式
第一行包含整数 n n n m m m

第二行包含 m m m 个质数。

输出格式
输出一个整数,表示满足条件的整数的个数。

数据范围
1 ≤ m ≤ 16 , 1 ≤ n , p i ≤ 109 1≤m≤16,1≤n,p_{i}≤109 1m16,1n,pi109

输入样例:

10 2
2 3

输出样例:

7

容斥原理:
假如我们现在有一个韦恩图,如果要不重不漏的表示出整个集合的面积(即三个集合的元素个数):

在这里插入图片描述

这就是一个基础的容斥原理,推广到n个圆的维恩图的话:
1个圆自己的-每2个圆相交的+有3个圆相交的-有4个圆相交的+…
且观察可知选偶数个集合的时候是负的,而选奇数个集合时是正的

对于这道题,我们要求个数时,就可以用 S 1 S_{1} S1表示1到n中能被 p 1 p_{1} p1整除的数,然后 S 2 S_{2} S2表示1到n中能被 p 2 p_{2} p2整除的数…让我们求个数的时候,就可以用容斥原理来求

S p S_{p} Sp表示1到n中能被p整除的个数,即是p的倍数的个数有多少,那么 S p = [ n p ] S_{p}=[\frac{n}{p}] Sp=[pn]

有多个集合相交的部分,即求能够被 p 1 , p 2 , p 3 . . . p_{1},p_{2},p_{3}... p1,p2,p3...等整除的数有多少时,表示为[ n p 1 ∗ p 2 ∗ . . . ∗ p k \frac{n}{p_{1}*p_{2}*...*p_{k}} p1p2...pkn]

为什么下取整? 因为有时候n可能不能整除p,则下取整可以保证取到最大的那个与p成倍数的数

用二进制数和位运算方法来枚举选法,从1枚举到2n,用每一位是1还是0来代表选法

此处容斥原理体现为:这里选的每一个数都相当于一个小集合,集合数代表的便是选的数的个数
代码:

#include<iostream>
using namespace std;
const int N = 20;int n, m;
int p[N];int main() {cin >> n >> m;for (int i = 0; i < m; i++) cin >> p[i];	//读入质数int res = 0;for (int i = 1; i < 1 << m; i++) {	//从1枚举到2的m次方-1个选法int t = 1, cnt = 0;	//t表示当前质数的乘积,cnt表示集合个数for(int j = 0;j < m;j++)	//枚举m个质数if (i >> j & 1) {	//如果当前这一位是1,即选上了cnt++;	//集合数加1//如果按i这种选法乘过之后,发现大于n了,那么就代表这种选法不成立//在这个情况下无法实现被这些选上的质数整除//相反如果乘过这些质数后小于n,那么就说明这些数是可以把1到n中的数整除的if ((long long)t * p[j] > n) {	//如果大于n就不用算了t = -1;break;}t *= p[j];}if (t != -1) {	//如果没有大于nif (cnt % 2) res += n / t;	//如果有奇数个集合那么加上else res -= n / t;			//如果有偶数个集合那么减去}}cout << res << endl;return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/452424.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一篇文章搞懂CNN(卷积神经网络)及其所含概念

目录 1. 什么是卷积神经网络&#xff1a;2. 应用领域&#xff1a;3. 架构&#xff1a;4. 卷积层的参数和名词参数&#xff1a;名词&#xff1a; 5. 注意&#xff1a;6. 经典网络&#xff1a;小结&#xff1a; 当下&#xff0c;计算机视觉在人工智能领域中扮演着至关重要的角色。…

[word] word中如何打出下横线 #其他#其他#其他

word中如何打出下横线 1、电脑打开word文档。 2、打开进入word文档后&#xff0c;在正文处点击鼠标右键&#xff0c;然后选择字体选项。 3、进入字体选项页面后&#xff0c;点击效果中的删除线然后点击界面下方的确定选项。 4、选择删除线之后&#xff0c;返回word正文处一直…

【蓝桥杯选拔赛真题64】python数字塔 第十五届青少年组蓝桥杯python 选拔赛比赛真题解析

python数字塔 第十五届蓝桥杯青少年组python比赛选拔赛真题 一、题目要求 (注:input()输入函数的括号中不允许添加任何信息) 提示信息: 数字塔是由 N 行数堆积而成,最顶层只有一个数,次顶层两个数,以此类推。相邻层之间的数用线连接,下一层的每个数与它上一层左上…

网工内推 | 金融业网络安全岗,最高40K*15薪,CISP认证优先

01 国泰产险 招聘岗位&#xff1a;资深信息安全工程师 职责描述&#xff1a; 1、负责公司云平台业务系统的安全规划设计&#xff0c;协助业务系统制定安全解决方案&#xff1b; 2、负责建立公司信息安全标准&#xff0c;制定平台安全策略&#xff0c;安全加固&#xff0c;防范…

【leetcode题解C++】450.删除二叉搜索树中的节点 and 669.修剪二叉搜索树 and 108.将有序数组转换为二叉搜索树

450. 删除二叉搜索树中的节点 给定一个二叉搜索树的根节点 root 和一个值 key&#xff0c;删除二叉搜索树中的 key 对应的节点&#xff0c;并保证二叉搜索树的性质不变。返回二叉搜索树&#xff08;有可能被更新&#xff09;的根节点的引用。 一般来说&#xff0c;删除节点可…

Android学习之路(27) ProGuard,混淆,R8优化

前言 使用java编写的源代码编译后生成了对于的class文件&#xff0c;但是class文件是一个非常标准的文件&#xff0c;市面上很多软件都可以对class文件进行反编译&#xff0c;为了我们app的安全性&#xff0c;就需要使用到Android代码混淆这一功能。 针对 Java 的混淆&#x…

力扣383周赛第三题

本题的难点其实不在思路上&#xff0c;而是有些人遇到这种题就不想做了&#xff0c;题目太长&#xff0c;有点读不懂题。 只要先耐心下来把题读懂之后这题其实就没那么难了&#xff0c;读懂题之后还有一个关键点就是&#xff0c;我们怎么在1e8时间复杂度之内跑过呢&#xff1f…

问题:以下关于搜索OCPC说法错误的是()? #知识分享#知识分享#媒体

问题&#xff1a;以下关于搜索OCPC说法错误的是&#xff08;)&#xff1f; A&#xff0e;OCPC进入第二阶段&#xff0c;不能随意更换转化目标和页面 B&#xff0e;OCPC可以直接跳过第一阶段&#xff0c;直接开始跑第二阶段 C&#xff0e;开启OCPC计划后&#xff0c;系统就会…

Flink生产环境常见问题及解决方法

在Flink生产环境中&#xff0c;可能会遇到一些常见的问题。下面简单的介绍几个常见问题&#xff0c;并且提供一些解决方法&#xff0c;来帮助你更好地应对这些问题。 故障转移和高可用性 Flink提供了故障转移和高可用性机制&#xff0c;但在配置和使用时可能会遇到问题。如果…

Linux 网络编程 + 笔记

协议&#xff1a;一组规则 分层模型结构&#xff1a; OSI七层模型&#xff1a;物理层、数据链路层、网络层、传输层、会话层、表示层、应用层TCP/IP 4层模型&#xff1a;链路层/网络接口层、网络层、传输层、应用层 应用层&#xff1a;http、ftp、nfs、ssh、telnet、传输层&am…

过年前想要便宜寄快递,究竟还有什么渠道呢?

马上就是年关了&#xff0c;心情显得异常激动了&#xff0c;想到马上就可以吃到团圆的年夜饭了&#xff0c;小编和大家都是非常的开心了&#xff0c;还有春节期间的旅游&#xff0c;探亲&#xff0c;都是值得期待的事情了&#xff0c;亲戚朋友&#xff0c;邻里邻居之间会互相送…

python 视频硬字幕去除 内嵌字幕去除工具vsr

项目简介 开源地址&#xff1a;https://github.com/YaoFANGUK/video-subtitle-remover Video-subtitle-remover (VSR) 是一款基于AI技术&#xff0c;将视频中的硬字幕去除的软件。 主要实现了以下功能&#xff1a; 无损分辨率将视频中的硬字幕去除&#xff0c;生成去除字幕后…