【蓝桥2025备赛】容斥原理

容斥原理

背景:两个集合相交

高中的韦恩图,我们知道两个集合相交时我们可以通过简单的计算来认识相关的性质
在这里插入图片描述

集合相交的区域是 A ∩ B A\cap B AB ,集合的并集是 A ∪ B A\cup B AB ,那怎么用集合表示 A ∪ B A\cup B AB

我们可以看作是A集合和B集合相加,但明显中间的 A ∩ B A\cap B AB 加了两次,因此要减去

所以 A ∪ B A\cup B AB= A + B − A ∩ B A+B-A\cap B A+BAB

容斥原理:如果是三个或多个集合相交我们该怎么做

这时候就要用到容斥原理这个知识了

三个集合相交:

在这里插入图片描述

多个集合相交:

在这里插入图片描述

我们接下来重点探讨三个集合相交的情况

在这里插入图片描述

先让 S 1 , S 2 , S 3 S_1,S_2,S_3 S1S2S3相加,但是红绿区域多加了一次,红紫区域和绿紫区域都是多加了一次,所以我们就要减去

S 1 ∩ S 2 , S 2 ∩ S 3 , S 1 ∩ S 3 S_1\cap S_2,S_2\cap S_3,S_1\cap S_3 S1S2,S2S3,S1S3 ,原先最中间的红绿紫区域多加了两次,但减去时减了三次,相当于最中间区域多减了一次,那么我们要加回来,即加上 S 1 ∩ S 2 ∩ S 3 S_1\cap S_2 \cap S_3 S1S2S3,最终结果如上图所示。

相关题目

幸运数

如果一个整数能够被 6 或 8整除,就称该整数为一个幸运数。

给定整数 n,请你计算 1到n范围内的幸运数的数量。

输入格式

一个整数 n。

输出格式

一个整数,表示 1到n范围内的幸运数的数量。

数据范围

前 3 个测试点满足 1≤n≤10。
所有测试点满足 1≤n≤100。

输入样例:
10
输出样例:
2
题解:

这道题看数据量很小,思路简单,直接遍历方便且怎么写都不会超时

于是暴力代码:

#include<bits/stdc++.h>
using namespace std;
int ans;
int main()
{   int n;cin>>n;for(int i=1;i<=n;i++){if(i%6==0||i%8==0)ans++;}cout<<ans;return 0;
}
容斥原理法

在这里插入图片描述

n个数里面有多少个被8整除:n/8个(计算机int 向下取整,n/8所得结果就是答案)

为什么这样算:从1到n,每8个数为一循环是8的倍数,8,16,24, 。。。等,不足8的不能计入

所以可以用==总的个数 − - n / 8 n/8 n/8- n / 6 − n / 24 ( 24 为 6 和 8 的最小公倍数 ) n/6-n/24(24为6和8的最小公倍数) n/6n/24(2468的最小公倍数)

#include<bits/stdc++.h>
using namespace std;
int ans;
int main()
{   //容斥原理:int n;cin>>n;cout<<n/6+n/8-n/24<<endl;return 0;
}

三个集合下容斥原理的应用

那如果是三个集合呢,下一题是三个集合时对于我们的容斥原理的应用

不想被排除

题目描述

给出一个数 n 以及 x , y , z ,求 1 到 n 中,有多少个数不是 x, y, z 中任意一个数的倍数。

输入格式

第一行输入一个整数 T,表示测试组数( 1 ≤ T ≤ 1 0 5 1≤T≤10^5 1T105 ).

接下来会有 T 行输入,每行 4 个整数 n, x*, y*, z*( 1 ≤ n ≤ 1 0 18 , 1 ≤ x , y , z ≤ 1 0 6 1≤n≤10^{18}, 1≤x,y,z≤10^{6 } 1n1018,1x,y,z106).

输出格式

共 𝑇T 行,每行输出一个整数,表示 1 到 n 中,不是 x, y*, z* 中任意一个数倍数的整数个数。

测试样例
输入数据 1
2
10 3 4 5
100 2 4 6
输出数据 1
3
50

在这里插入图片描述

题目分析:

S 1 看作被 x 整除, S 2 看作被 y 整除 , S 3 看作被 z 整除,那么 S 1 ∩ S 2 则看作被 x 和 y 整除 S_1看作被x整除,S_2看作被y整除,S_3看作被z整除,那么S_1\cap S_2则看作被x和y整除 S1看作被x整除,S2看作被y整除,S3看作被z整除,那么S1S2则看作被xy整除

S 1 ∩ S 3 看作被 x 和 z 整除, S 2 ∩ S 3 看作被 y 和 z 整除, S 1 ∩ S 2 ∩ S 3 看作同时被 x , y , z 整除 S_1\cap S_3看作被x和z整除,S_2\cap S_3看作被y和z整除,S_1\cap S_2\cap S_3看作同时被x,y,z整除 S1S3看作被xz整除,S2S3看作被yz整除,S1S2S3看作同时被x,y,z整除

所以问题就简化为用总个数减去 ①被x和y整除,②被x和z整除,③被y和z整除,④同时被x,y,z整除的数的个数

这里的点是如何求 S 1 ∩ S 2 ∩ S 3 S_1\cap S_2\cap S_3 S1S2S3​ ,即x,y,z三个数的最小公倍数

这里直接借用CSDN大佬的解决办法:即先求x,y的最小公倍数 L C M ( x , y ) ,再求 z 和 L C M ( x , y ) 的最小公倍数 L C M ( L C M ( x , y ) , z ) LCM(x,y),再求z和LCM(x,y)的最小公倍数LCM(LCM(x,y),z) LCM(x,y),再求zLCM(x,y)的最小公倍数LCM(LCM(x,y),z)

在这里插入图片描述

#include<bits/stdc++.h>
using namespace std;
#define int long longint gcd(int a, int b) {return b == 0 ? a : gcd(b, a % b);
}
signed main()
{   int t,n,x,y,z;cin>>t;while(t--){scanf("%lld%lld%lld%lld",&n,&x,&y,&z);int a1=(x*z)/gcd(x,z);//x和z的最小公倍数int a2=(y*z)/gcd(y,z);//y和z的最小公倍数int a3=(x*y)/gcd(x,y);//x和y的最小公倍数a3int a4=(a3*z)/gcd(a3,z);//a3和z的最小公倍数printf("%lld\n",n-(n/x+n/y+n/z+n/a4-n/a1-n/a2-n/a3));//总个数减去 ①被x和y整除,②被x和z整除,③被y和z整除,④同时被x,y,z整除的数的个数}return 0;
}

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

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

相关文章

分布式与一致性协议之ZAB协议(一)

ZAB协议 概述 很多人应该都使用过ZooKeeper&#xff0c; 它是一个开源的分布式协调服务&#xff0c;比如你可以用它进行配置管理、名字服务等。在ZooKeeper中&#xff0c;数据是以节点的形式存储的。如果你要用ZooKeeper做配置管理&#xff0c;那么就需要在里面创建指定配置&…

2024.5.5 机器学习周报

目录 引言 Abstract 文献阅读 1、题目 2、引言 3、创新点 4、匹配问题 5、SuperGlue架构 5.1、注意力图神经网络&#xff08;Attentional Graph Neural Network&#xff09; 5.2、最佳匹配层&#xff08;Optimal matching layer&#xff09; 5.3、损失 6、实验 6.…

模型剪枝——Linear Combination Approximation of Feature for Channel Pruning

线性逼近剪枝代码实现见文末 论文地址:CVPR 2022 Open Access Repositoryhttps://openaccess.thecvf.com/content/CVPR2022W/ECV/html/Joo_Linear_Combination_Approximation_of_Feature_for_Channel_Pruning_CVPRW_2022_paper.html 1.概述 传统的剪枝技术主要集中在去除对…

4.【Orangepi Zero2】Linux定时器(signal、setitimer),软件PWM驱动舵机(SG90)

Linux定时器&#xff08;signal、setitimer&#xff09;&#xff0c;软件PWM驱动舵机&#xff08;SG90&#xff09; signalsetitimer示例 软件PWM驱动舵机&#xff08;SG90&#xff09; signal 详情请看Linux 3.进程间通信&#xff08;shmget shmat shmdt shmctl 共享内存、si…

经纬度聚类:聚类算法比较

需求&#xff1a; 将经纬度数据&#xff0c;根据经纬度进行聚类 初始数据 data.csv K均值聚类 简介 K均值&#xff08;K-means&#xff09;聚类是一种常用的无监督学习算法&#xff0c;用于将数据集中的样本分成K个不同的簇&#xff08;cluster&#xff09;。其基本思想是…

支付宝支付流程

第一步前端&#xff1a;点击去结算&#xff0c;前端将商品的信息传递给后端&#xff0c;后端返回一个商品的订单号给到前端&#xff0c;前端将商品的订单号进行存储。 对应的前端代码&#xff1a;然后再跳转到支付页面 // 第一步 点击去结算 然后生成一个订单号 // 将选中的商…

Django之单文件上传(以图片为例)

一&#xff0c;创建项目 初始化&#xff0c;数据迁移&#xff0c;创建superuser&#xff0c;创建app等 二&#xff0c;配置settings.py 1&#xff0c;配置数据库&#xff08;本作者使用的mysql&#xff09;&#xff0c;以前文章有提到 2&#xff0c;配置静态文件存放路径 STAT…

2-手工sql注入(进阶篇) sqlilabs靶场5-10题

1. 阅读&#xff0c;学习本章前&#xff0c;可以先去看看基础篇&#xff1a;1-手工sql注入(基础篇)-CSDN博客 2. 本章通过对sqlilabs靶场的实战&#xff0c;关于sqlilabs靶场的搭建&#xff1a;Linux搭建靶场-CSDN博客 3. 本章会使用到sqlmap&#xff0c;关于sqlmap的命令&…

Vitis HLS 学习笔记--HLS流水线基本用法

目录 1. 简介 2. 示例 2.1 对内层循环打拍 2.2 对外层循环打拍 2.3 优化数组访问后打拍 3. 总结 1. 简介 本文介绍pipeline的基本用法。pipeline是一种用于提高硬件设计性能的技术。本文介绍了pipeline在累加计算函数中的应用。通过优化内外层循环和数组访问&#xff0c…

C++初学者,使用汉语编程

现在的IDE是完全支持中文编程的&#xff0c;对于C语系的爱好者来说&#xff0c;又可以发挥自己的想象力了。 今天使用一些宏定义写了一个小程序&#xff0c;用于玩弄C.

合合信息embedding模型登顶MTEB中文榜单:中文文本向量化技术的创新突破

引言MTEB中文榜单&#xff1a;权威性与挑战并存Embedding&#xff1a;特征与优势凸显模型应用&#xff1a;开启文本智能新篇章升级迭代&#xff1a;攻克行业技术难点结尾 引言 在信息化时代&#xff0c;文本数据呈爆炸式增长&#xff0c;如何高效、准确地处理和分析这些文本数…

Vue3-element-plus表格

一、element-plus 1.用组件属性实现跳转路由 <el-menu active-text-color"#ffd04b" background-color"#232323" :default-active"$route.path" //高亮 text-color"#fff"router><el-menu-item index"/article/channe…

【算法刷题日志】吸氧羊的StarryCoding之旅 - 贡献法计算

题目链接&#xff1a;https://www.starrycoding.com/problem/3 题目描述 吸氧羊终于注册了一个StarryCoding账号&#xff01;&#xff08;她很开心&#xff09; 但是吸氧羊忘记了它的密码&#xff0c;她想起你是计算机大师&#xff0c;于是就来请教你。 她虽然不记得密码了…

C++ | Leetcode C++题解之第70题爬楼梯

题目&#xff1a; 题解&#xff1a; class Solution { public:int climbStairs(int n) {double sqrt5 sqrt(5);double fibn pow((1 sqrt5) / 2, n 1) - pow((1 - sqrt5) / 2, n 1);return (int)round(fibn / sqrt5);} };

SPI(通信协议)

简介 SPI是一个同步的数据总线&#xff0c;也就是说它是用单独的数据线和一个单独的时钟信号来保证发送端和接收端的完美同步。 时钟是一个震荡信号&#xff0c;它告诉接收端在确切的时机对数据线上的信号进行采样。 产生时钟的一侧称为主机&#xff0c;另一侧称为从机。总是…

VMware虚拟机中ubuntu使用记录(6)—— 如何标定单目相机的内参(张正友标定法)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、张正友相机标定法1. 工具的准备2. 标定的步骤(1) 启动相机(2) 启动标定程序(3) 标定过程的操作(5)可能的报错 3. 标定文件内容解析 前言 张正友相机标定法…

编译 x264 for iOS

文章目录 编译在 FFMpeg 启用 x264其他编译选项报错处理 环境 &#xff1a; macOS 14.3.1 x264 - 20191217-2245 编译 1、下载 x264 源码 http://download.videolan.org/pub/videolan/x264/snapshots/ 这里我下载x264-snapshot-20191217-2245.tar.bz2 &#xff08;截止2024-…

OpenAI下周将发布ChatGPT搜索引擎,挑战谷歌搜索!

目前&#xff0c;多方位消息证实&#xff0c;OpenAI将会在5月9日上午10点公布该消息&#xff0c;大约是北京时间周五的凌晨2点。 5月3日&#xff0c;前Mila研究员、麻省理工讲师Lior S爆料&#xff0c;根据OpenAI最新的SSL证书日志显示&#xff0c;已经创建了search.chatgpt.c…

Flutter笔记:Widgets Easier组件库(12)使用消息吐丝(Notify Toasts)

Flutter笔记 Widgets Easier组件库&#xff08;12&#xff09;使用消息吐丝&#xff08;Notify Toasts&#xff09; - 文章信息 - Author: 李俊才 (jcLee95) Visit me at CSDN: https://jclee95.blog.csdn.netMy WebSite&#xff1a;http://thispage.tech/Email: 29114848416…

ICode国际青少年编程竞赛- Python-1级训练场-基础训练2

ICode国际青少年编程竞赛- Python-1级训练场-基础训练2 1、 a 4 # 变量a存储的数字是4 Dev.step(a) # 因为变量a的值是4&#xff0c;所以Dev.step(a)就相当于Dev.step(4)2、 a 1 # 变量a的值为1 for i in range(4):Dev.step(a)Dev.turnLeft()a a 1 # 变量a的值变为…