笔记---容斥原理

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.mzph.cn/news/666151.shtml

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

相关文章

【项目日记(八)】第三层: 页缓存的具体实现(下)

&#x1f493;博主CSDN主页:杭电码农-NEO&#x1f493;   ⏩专栏分类:项目日记-高并发内存池⏪   &#x1f69a;代码仓库:NEO的学习日记&#x1f69a;   &#x1f339;关注我&#x1faf5;带你做项目   &#x1f51d;&#x1f51d; 开发环境: Visual Studio 2022 项目日…

Android14 WMS-DisplayArea层级结构生成

每个手机可以有多个屏幕, 一个屏幕是一个displaycont, 下面从displaycont开始, 看下层级结构是如何构建的 02-02 19:55:04.258 3530 3530 V jinyanmeiWMS: java.lang.RuntimeException: jinyanmeiWMS 02-02 19:55:04.258 3530 3530 V jinyanmeiWMS: at com.android.serve…

【大数据面试题】001 Flink 的 Checkpoint 原理

一步一个脚印&#xff0c;一天一道大数据面试题。 Flink 是大数据实时处理计算框架。实时框架对检查点&#xff0c;错误恢复的功能要比离线的更复杂&#xff0c;所以一起来了解 Flink 的 Checkpoint 机制吧。 Checkpoint 机制 触发 Checkpoint 通过设置时间或数据量阈值来触…

LangChain 81 LangGraph 从入门到精通三

LangChain系列文章 LangChain 60 深入理解LangChain 表达式语言23 multiple chains链透传参数 LangChain Expression Language (LCEL)LangChain 61 深入理解LangChain 表达式语言24 multiple chains链透传参数 LangChain Expression Language (LCEL)LangChain 62 深入理解Lang…

低版本MATLAB打开高版本Simulink文件的方法

打开simulink&#xff0c;依次点击“建模”、“环境”、“simulink预设项”&#xff0c;如图所示&#xff1a; 然后在弹出的窗口中&#xff0c;点击“模型文件”&#xff0c;并取消勾选“不要加载用更新版本的simulink创建的模型”&#xff0c;接着点击“应用”即可。如图所示&…

EAK厚膜功率电阻成功在eVTOL大量使用

eVTOL操作的特点是更高的放电曲线&#xff0c;特别是在起飞和着陆期间。 “传统上&#xff0c;电池要么被设计成提供大量能量&#xff0c;要么被设计成高功率&#xff0c;”Cuberg创始人兼首席执行官Richard Wang说。“对于eVTOL电池来说&#xff0c;在能量和功率之间保持良好…

记一次python爬虫多线程报错问题(多线程优先级别问题)。

部分python脚本&#xff1a; def sap_logon():try:os.system(taskkill /F /IM saplogon.exe)print("SAP程序已关闭&#xff01;")except:print("SAP程序没打开&#xff01;")sap_app r"C:\\Program Files (x86)\\SAP\FrontEnd\\SAPgui\\saplogon.ex…

情人节适合送哪些礼物?2024年情人节送礼指南大推荐!

情人节即将来临&#xff0c;这是一年一度表达爱意的时刻。在这个特殊的日子里&#xff0c;送上一份精心挑选的礼物&#xff0c;将会让爱意更加深刻。但是&#xff0c;肯定会有朋友会困惑于选择哪种礼物能够最好地表达您的心意。不用担心&#xff0c;今天小编就为大家精心准备了…

Linux的7个运行级别

目录 1、有那7个运行级别&#xff1f; 2、那么如何查看运行级别呢?  3、那么我想临时切换运行级别? 4、那么我想修改配置文件中的运行级别呢? 1、有那7个运行级别&#xff1f; 0&#xff1a;停机状态。系统默认运行级别不能设置为0&#xff0c;否则系统不能正常启动&a…

JDK17中的密封类sealed和permits使用指南:什么是Java中的sealed和permits?

博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的宝典&#xff01;《IDEA开发秘籍》 — 提升你的IDEA技能&#xff01;《100天精通鸿蒙》 …

FPGA项目(16)——基于FPGA的音乐演奏电路

1.设计要求 能在实验箱上&#xff0c;循环播放一段音乐。&#xff08;需要源码的直接看最后一节&#xff09; 2.设计原理 组成乐曲的每个音符的发音频率值及其持续的时间是乐曲能连续演奏所需要的两个基本要素&#xff0c;问题是如何来获取这两个要素所对应的数值以及通过纯硬件…

界面控件DevExpress ASP.NET Spreadsheet组件 - 轻松集成电子表格功能!(一)

DevExpress ASP. NET Spreadsheet组件允许您轻松地将电子表格功能合并到任意ASP. NET应用程序&#xff0c;它可以加载、转换和保存工作簿到XLS-XLSx二进制文件格式&#xff0c;还可以导出和导入XLSX、CSV和TXT文件。 P.S&#xff1a;DevExpress ASP.NET Web Forms Controls拥有…

聊聊PowerJob的UserInfoController

序 本文主要研究一下PowerJob的UserInfoController UserInfoController tech/powerjob/server/web/controller/UserInfoController.java RestController RequestMapping("/user") public class UserInfoController {Resourceprivate UserService userService;Res…

课时13:变量基础_变量场景

2.1.1 变量场景 学习目标 这一节&#xff0c; 我们从 数据存储、变量场景、小结 三个方面来学习。 数据存储 数据存储 所谓的数据存储&#xff0c;我们从三方面来理解这句话&#xff1a;1、数据保存到哪里 -- 各种媒介&#xff0c;CPU、内存、磁盘、磁带、网盘...2、数据保…

06:原生云K8S解密|K8S集群安装部署|K8S网络插件

原生云K8S解密&#xff5c;K8S集群安装部署&#xff5c;K8S网络插件 K8SK8S集群架构图解 K8S部署仓库初始化kube-master安装计算节点的安装token管理 配置flannel网络&#xff08;master主机操作&#xff09; K8S 有大量夸主机的容器需要管理&#xff0c;快速部署应用&#xff…

Kotlin-类

构造函数 Java final File file new File("file.txt");Kotlin val file File("file.txt")类 Java public final class User { }Kotlin class User公开类 Java public class User { }Kotlin open class User属性类 Java final class User {pri…

河西走廊潜在蒸散发时空格局变化与气象因素的关系_马亚丽_2023

河西走廊潜在蒸散发时空格局变化与气象因素的关系_马亚丽_2023 摘要关键词 1 数据与方法1.1 数据来源1.2 变化趋势分析1.3 定性分析方法1.3.1 主成分分析1.3.2 相关系数1.3.3 通径分析 1.4 定量分析方法1.4.1 敏感系数1.4.2 贡献率计算 2 结果与分析2.1 ET0多年变化特征2.1.1 E…

pandas+numpy的一些基础总结

都是我白嫖来的知识&#xff0c;当记笔记了 pandas 8 个常用的 set_option 设置方法 - 知乎 (zhihu.com) np.set_printoptions()用法总结-CSDN博客 特别有用

Python绘图工具seaborn,教会你如何绘制更加精美的图形(二)

文章目录 用分类数据绘图1 类别散点图2 类别内的数据分布2.1 绘制箱形图2.2 绘制提琴图 3 类别内的统计估计3.1 绘制条形图3.2 绘制点图 Hello&#xff0c;大家好&#xff0c;我是景天&#xff0c;今天我们探讨下seaborn根据分类数据类绘图的方法 用分类数据绘图 数据集中的数…

【前端模板】bootstrap5实现高端手表网页Chrono(适用电商,附带源码)

一、需求分析 高端手表网页是指专门销售高端手表的在线平台或网站。这些网页旨在向消费者展示和销售高级手表品牌的产品。以下是一些常见的功能&#xff1a; 产品展示&#xff1a;高端手表网页提供详细的产品页面&#xff0c;展示不同品牌和型号的高级手表。这些页面通常包括产…