【蓝桥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 long

int 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的最小公倍数a3
        int 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.mfbz.cn/a/575440.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

正点原子[第二期]Linux之ARM(MX6U)裸机篇学习笔记-6.3

前言&#xff1a; 本文是根据哔哩哔哩网站上“正点原子[第二期]Linux之ARM&#xff08;MX6U&#xff09;裸机篇”视频的学习笔记&#xff0c;在这里会记录下正点原子 I.MX6ULL 开发板的配套视频教程所作的实验和学习笔记内容。本文大量引用了正点原子教学视频和链接中的内容。…

mybatis的使用技巧9——mysql按年、季度、月、周等不同时间维度查询或分组统计

在实际项目开发过程中&#xff0c;按不同时间维度查询业务数据的操作异常频繁。比较多的操作如支持按时间周期范围做列表数据的筛选&#xff0c;或者是按年月日等维度的图表展示&#xff0c;亦或者是首页的概况&#xff0c;三维大屏的展示等&#xff0c;都离不开不同时间周期查…

网络靶场实战-Qiling Fuzz实例分析

背景 在上一小节中&#xff0c;介绍了qiling框架的背景和基础使用&#xff0c;并以相关的CTF和qilinglab实例进行练习加深对qiling框架的使用&#xff0c;后续并简单介绍了qiling fuzz的功能。 在这一小节&#xff0c;我们将对qiling fuzz iot设备进行测试以及以实例的方式对…

中级信息系统管理工程师-必会题锦集

文章目录 中级信息系统管理工程师-必会题锦集题目一CPU[解析]试题二 CPU[解析] 中级信息系统管理工程师-必会题锦集 题目一CPU CPU中&#xff08;1&#xff09;不仅要保证指令的正确执行&#xff0c;还要能够处理异常事件。 A. 运算器 B. 控制器 C. 寄存器组 D. 内部总线 [解…

1.C++入门(上)

目录 1.C关键字 2.命名空间 作用域方面的优化 a.命名空间定义 b.命名空间使用 3.C 输入&输出 1.C关键字 C有63个关键字&#xff0c;C语言有32个关键字&#xff0c;存在重叠如荧光笔标出 2.命名空间 作用域方面的优化 如果变量&#xff0c;函数和类的名称都存在于全…

SpringBootWeb请求

文章目录 前言一、Postman介绍 二、简单参数三、实体参数四、数组集合参数五、日期参数六、JSON参数七、路径参数 前言 在上一篇文章中&#xff0c;已经基于SpringBoot的方式开发一个web应用&#xff0c;浏览器发起请求 /hello 后 &#xff0c;给浏览器返回字符串 “Hello Wor…

C++笔试强训day7

目录 1.字符串中找出连续最长的数字串 2.岛屿数量 3.拼三角 1.字符串中找出连续最长的数字串 链接 我的思路很简洁&#xff0c;就是双指针遍历&#xff0c;然后不断更新左位置left和右位置right和长度len。 然后我写代码的时候代码思路没跟上原本思路&#xff0c;直接把所有…

遇坑分享24.4.25

在对数组进行排序算法时&#xff0c;如果我使用多个下标进行元素交换的时候&#xff0c;可能会出错。 以下面的直接选择排序&#xff08;排列升序&#xff09;为例&#xff1a; public static void selectSort1(int[] arr){int left0;int rightarr.length-1;while(left<rig…

2024HWqax线上产品培训试题(天眼)

最近做了qax笔试题&#xff0c;分享一下&#xff0c;仅供学习参考&#xff0c;侵删

力扣HOT100 - 200. 岛屿数量

解题思路&#xff1a; 岛屿题目一般使用dfs。 1.判断是否越界 2.用0&#xff0c;1&#xff0c;2三个状态标识当前格子的状态&#xff08;三个状态比两个状态更清晰&#xff09; 3.向周围四个方向遍历 class Solution {public int numIslands(char[][] grid) {int cnt 0;fo…

【Spring篇 | 补充】三级缓存解决循环依赖

文章目录 7.三级缓存解决循环依赖7.1何为循环依赖&#xff1f;7.2三级缓存解析7.3三级缓存解决循环依赖7.3.1实例化A7.3.2创建B的需求7.3.3实例化B7.3.4注入A到B7.3.5B创建完成7.3.6回溯至A7.3.7清理二级缓存 7.4为什么不能用二级缓存解决循环依赖&#xff1f; 7.三级缓存解决循…

删除docker的容器与镜像

如果您想要卸载通过 docker pull influxdb 命令下载的 InfluxDB 容器&#xff0c;您需要执行以下步骤&#xff1a; 1. **停止正在运行的 InfluxDB 容器**&#xff1a; 首先&#xff0c;您需要停止任何正在运行的 InfluxDB 容器。您可以使用以下命令来查找正在运行的 InfluxD…

Xilinx 7系列 clock IP核的使用(二)

在 Clocking Wizard 中的输出时钟设置部分&#xff0c;主要目的是生成并配置系统所需的特定时钟频率和信号。这一功能在硬件设计和开发中非常关键&#xff0c;因为它允许用户精确地控制各个部分的时钟信号&#xff0c;以满足特定的性能、功耗和时序要求。 1 配置输出时钟 要启…

宝宝洗衣机买什么样的好?诚意推荐四款实力超群的婴儿洗衣机

近几年家用洗衣机标准容积的大大增加&#xff0c;从5Kg、6Kg升级到9Kg、10Kg。大容量洗衣机满足了家庭中清洗大件衣物、床上用品的需求。但由于普通大型洗衣机所洗衣物混杂&#xff0c;很多时候由于宝宝小件衣物数量不多&#xff0c;却也并不适合放在一起扔进大型洗衣机中清洗。…

macOS 一些系统图标的存放位置 icns

macOS 一些系统图标的存放位置 icns macOS 中有很多好看的图标&#xff0c;有时候就想用一下它&#xff0c;我来告诉你他们的具体位置。 系统图标位置&#xff0c;像各种通用文件类型的图标都在这里面&#xff0c;里面好多高清的系统图标 /System/Library/CoreServices/Core…

使用PlantUML绘制活动图、泳道图

最近在学PlantUML 太漂亮了 给大家欣赏一下 我也记录一下 startuml |使用前| start :用户打开旅游App; |#LightSkyBlue|使用后| :用户浏览旅游信息; |#AntiqueWhite|登机前| :用户办理登机手续; :系统生成登机牌; |使用前| :用户到达机场; |登机前| :用户通过安检; |#Light…

快速入门Web开发(中)后端开发(有重点)

你好,我是Qiuner. 为记录自己编程学习过程和帮助别人少走弯路而写博客 这是我的 github gitee 如果本篇文章帮到了你 不妨点个赞吧~ 我会很高兴的 &#x1f604; (^ ~ ^) 想看更多 那就点个关注吧 我会尽力带来有趣的内容 CSDN 图片导入做的不是很好&#xff0c;因此如果有没有…

这个合租室友真的没有一点公德心,还好他搬走了

这个合租室友真的没有一点公德心&#xff0c;还好他搬走了 这个出租屋有四个房间。 有三个卧室&#xff0c;和一个隔断。 我住三个卧室中的一个。下图中右边那个就是我住的。 2023年下半年&#xff0c;左边那个屋子来了一个新租户小白。 在住的过程中&#xff0c;隔断间的租…

Pulsar Meetup 深圳 2024 会务介绍

“ Hi&#xff0c;各位热爱 Pulsar 的小伙伴们&#xff0c;Pulsar Meetup 深圳 2024 报名倒计时啦&#xff0c;快来报名。这里汇集了腾讯、华为和谙流科技等大量 Pulsar 大咖&#xff0c;干货多多&#xff0c;礼品多多&#xff0c;不容错过啊。 ” 活动介绍 由 AscentStream 谙…

华为ensp中链路聚合两种(lacp-static)模式配置方法

作者主页&#xff1a;点击&#xff01; ENSP专栏&#xff1a;点击&#xff01; 创作时间&#xff1a;2024年4月26日11点54分 链路聚合&#xff08;Link Aggregation&#xff09;&#xff0c;又称为端口聚合&#xff08;Port Trunking&#xff09;&#xff0c;是一种将多条物理…