【蓝桥2025备赛】容斥原理

news/2024/9/23 20:14:20/

容斥原理

背景:两个集合相交

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

集合相交的区域是 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.ppmy.cn/news/1446362.html

相关文章

Spring boot 应用引入 Spring cloud alibaba nacos

Spring boot 应用引入 Spring cloud alibaba nacos 1. 引入pom依赖2. 配置文件(bootstrap.yml)3. 配置中心配置建议4. 注册中心4.1 服务注册4.2 服务发现 1. 引入pom依赖 要在Spring Boot应用中引入Spring Cloud Alibaba的依赖以及Nacos的依赖&#xff0c;您可以按照以下步骤在…

小程序地理位置权限如何申请?

这篇内容会教大家如何快速申请“获取当前的地理位置&#xff08;onLocationChange&#xff09;”接口&#xff0c;以便帮助大家顺利开通接口。以下内容是本人经历了多次的申请经历得出来的经验&#xff0c;来之不易&#xff0c;望大家给予鼓励&#xff01; 小程序地理位置接口有…

在 H5 页面和 uniapp 小程序之间进行数据通信

在 H5 页面和 uniapp 小程序之间进行数据通信可以使用以下方法&#xff1a; URL 参数传递 在 H5 页面中使用 URL 参数来传递数据&#xff0c;然后在小程序中使用 uni.getLaunchOptionsSync() 或者 onLaunch/onShow 生命周期函数来获取 URL 参数中的数据。 在 H5 页面中&…

nodejs写接口(一)

一、新手上路十大步 &#xff08;1&#xff09;先建一个常用的文件夹 &#xff08;2&#xff09;使用code打开 &#xff08;3&#xff09;在里面新建一个index.js文件 &#xff08;4&#xff09;新建项目 npm init -y //用于自己搭建一个项目框架&#xff08;写框架&#xf…

ChatGPT向付费用户推“记忆”功能,可记住用户喜好 | 最新快讯

4月30日消息&#xff0c;人工智能巨头OpenAI宣布&#xff0c;其开发的聊天机器人ChatGPT将在除欧洲和韩国以外的市场全面上线“记忆”功能。这使得聊天机器人能够“记住”ChatGPT Plus付费订阅用户的详细信息&#xff0c;从而提供更个性化的服务。 OpenAI早在今年2月就已经宣布…

【Camera KMD ISP SubSystem笔记】CAM SYNC与DRQ①

在android系统中fence用于不同模块需要访问同一块buffer的同步&#xff0c;例如camera和graphic。对于preview buffer, camera是生产者graphic是消费者。 camera需要生产图像数据到preview buffer时需要等待preview buffer的 fence可用。 camera sync是高通camx框架里面用于各个…

electron中主进程和渲染进程通信

在 Electron 中&#xff0c;通过使用 IPC &#xff08;Inter-Process Communication&#xff09;机制&#xff0c;ipcMain 和 ipcRenderer 模块可以在主线程&#xff08;主进程&#xff09;和渲染线程&#xff08;渲染进程&#xff09;之间进行消息通信。当你想要从主线程发送数…

Fastadmin 日常项目常见用法整理

ps&#xff1a;自己使用笔记备用&#xff0c;不间断更新&#xff0c;常见功能点 一&#xff0c;数据库后缀 结尾字符示例类型要求字段说明timerefreshtimebigint/datetime识别为日期时间型数据&#xff0c;自动创建选择时间的组件imagesmallimagevarchar识别为图片文件&#…