第三十六章 数论——容斥原理

news2024/10/6 10:40:37

第三十六章 数论——容斥原理

一、容斥原理

1、定理内容

我们在高中阶段都学过韦恩图,韦恩图其实就是用来描述集合与集合之间的关系的。

我们看下面的图:
请添加图片描述
这道题的话,我们首先将三个圆圈加在一起,但是叶子形状的部分会被我们重复加了两遍,所以我们要减去。但是三个叶子形状的中间也会有交叉的部分。所以这个部分又被我们减少了三次。所以我们还要再加上一次中间部分。

因此,就出现了我们图中的红色式子。

因此,我们总结出了一个规律。如果我们求的是奇数个集合的合并,那么我们就要加上。如果是偶数个集合的合并,我们就要减去。

那么我们从这个特殊的例子推广到一般情况,就会得到如下公式:
请添加图片描述
而这个式子就是我们的容斥原理

那么容斥原理的时间复杂度是多少呢?

我们可以看作我们的前面有 n n n个集合 S S S,那么我们从中选出1个集合就是 C n 1 C_n^1 Cn1
选出任意两个集合的交集,就是 C n 2 C_n^2 Cn2

那么依次类推:

我们选出所有集合所需的情况就是:

C n 1 + C n 2 + C n 3 + . . . + C n n C_n^1+C_n^2+C_n^3+...+C_n^n Cn1+Cn2+Cn3+...+Cnn

而根据我们高中的知识:
C n 0 + C n 1 + C n 2 + C n 3 + . . . + C n n = 2 n C_n^0+C_n^1+C_n^2+C_n^3+...+C_n^n=2^n Cn0+Cn1+Cn2+Cn3+...+Cnn=2n

那么我们选出所有情况来运用容斥原理计算的次数就是:

C n 1 + C n 2 + C n 3 + . . . + C n n = 2 n − 1 C_n^1+C_n^2+C_n^3+...+C_n^n=2^n-1 Cn1+Cn2+Cn3+...+Cnn=2n1

时间复杂度就是 O ( 2 n ) O(2^n) O(2n)

二、代码模板

1、问题

在这里插入图片描述

这道题可以转化成下面的图片:

请添加图片描述
紫色圈代表能够被p1整除的,绿色圈代表能被p2整除的,依此类推。题目中就是让我求上图中的元素个数。

如果我们只是单纯的把被某个数整除的数字个数加起来的话,中间一定会有重复的。因此,我们需要根据容斥原理来求。

利用容斥原理的话,我们有以下几个问题:

(1)如何求出能够被整除的个数?

其实很简单,能被 p 1 p_1 p1整除的个数是 [ N p 1 ] [\frac{N}{p_1}] [p1N]

中间的交集的话,我们以能够被 p 1 p_1 p1或者 p 2 p_2 p2为例。我们只需要求 [ N p 1 ∗ p 2 ] [\frac{N}{p_1*p_2}] [p1p2N]

依次类推。

(2)如何枚举出 2 n − 1 2^n-1 2n1种情况?

那么这个枚举的话,可以采用二进制的思想,我们的情况一共是 2 n − 1 2^n-1 2n1种,我们将其转化为二进制的话,(以n=3)为例:

2 3 − 1 = 111 2^3-1=111 231=111

每一位代表一个集合,此时三位都是1,说明我们要求三个集合的交集

那么如果是 101 101 101,就代表我们要求第一个集合和第三个集合的交集。

而我们的所有情况无非就是从 001 − 111 001-111 001111,换算为十进制的话,我们就是要枚举从 1 1 1 2 n − 1 2^n-1 2n1。这中间的每个数字的二进制位都代表着一种情况。

当上述两个问题解决之后,我们就可以套用容斥原理的公式了。

2、代码实现:

#include<iostream>
using namespace std;
typedef long long LL;
const int N=20;
int p[N];
int main()
{
    int n,m,res=0;
    cin>>n>>m;
    //读取除数
    for(int i=0;i<m;i++)scanf("%d",p+i);
    //枚举情况
    for(int i=1;i<1<<m;i++)
    {
    	//t用来记录结果,s用来记录集合的个数
        int t=1,s=0;
        //枚举情况i的二进制位
        for(int j=0;j<m;j++)
        {
            if(i>>j&1)//如果这一位是1,那么就让该位对应的集合参与运算
            {
                if((LL)t*p[j]>n)//如果几个数的积,已经大于了n,那么这种情况不存在。
                {
                    t=0;//如果不存在了,就直接扔掉就好了。
                    break;
                }
                t*=p[j];//乘上该集合所对的除数
                s++;//记录参与的集合个数
            }

        }
        if(t)
        {
        	//使用容斥原理:
            if(s%2)res+=n/t;//如果集合是奇数就加上
            else res-=n/t;//如果集合是偶数就减去
        }
    }
    cout<<res<<endl;
}

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

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

相关文章

开启微信小程序的学习窗口(第一课)

第一个问题 什么是微信小程序 微信小程序&#xff0c;小程序的一种&#xff0c;英文名Wechat Mini Program&#xff0c;是一种不需要下载安装即可使用的应用&#xff0c;它实现了应用“触手可及”的梦想&#xff0c;用户扫一扫或搜一下即可打开应用。 全面开放申请后&#xff0…

Educational Codeforces Round 93 (Rated for Div. 2) K. Lonely Numbers

Problem - C - Codeforces 翻译&#xff1a; 给定一个数组&#x1d44e;1&#xff0c;&#x1d44e;2&#xff0c;…&#xff0c;&#x1d44e;&#x1d45b;&#xff0c;由0到9的整数组成。一子数组&#x1d44e;&#x1d459;,&#x1d44e;&#x1d459; 1,&#x1d44e;&…

R实战 | 置换多元方差分析(以PCoA的PERMANOVA分析为例)

adonis-cover置换多元方差分析&#xff08;Permutational multivariate analysis of variance&#xff0c;PERMANOVA&#xff09;&#xff0c;又称非参数多因素方差分析&#xff08;nonparametric multivariate analysis of variance&#xff09;、或者ADONIS分析。它利用距离矩…

第003课 - 分布式基础概念

文章目录 集群、分布式、节点远程调用负载均衡服务注册/发现和注册中心服务熔断和降级API网关我们以前将所有的代码、页面、sql语句,写到一个应用,如果有一个地方有问题,整个就不可用了。 我们可以基于业务边界进行服务微化和拆分。 如果有一个出现了问题,不影响其他服务…

迅为LS2K0500开发板龙芯全国产处理器LoongArch架构核心主板

全国产开发板&#xff1a; 迅为iTOP-LS2K0500开发采用龙芯LS2K0500处理器&#xff0c;基于龙芯自主指令系统&#xff08;LoongArch&#xff09;架构&#xff0c;片内集成64位LA264处理器核、32位DDR3控制器、2DGPU、DVO显示接口、两路PCle2.0、两路SATA2.0、四路USB2.0、一路US…

梯度下降算法、随机梯度下降算法、动量随机梯度下降算法、AdaGrad算法、RMSProp算法、Adam算法详细介绍及其原理详解

相关文章 梯度下降算法、随机梯度下降算法、动量随机梯度下降算法、AdaGrad算法、RMSProp算法、Adam算法详细介绍及其原理详解反向传播算法和计算图详细介绍及其原理详解 文章目录相关文章前言一、回归拟合问题二、损失函数三、梯度下降算法四、随机梯度下降算法五、动量随机梯…

国际山岳日,周大福百年承诺续写永恒美好

纵横古今&#xff0c;俯瞰万里 每一寸绿野都孕育万物生机 每一座山林都彰示生命之本 百周年承诺 守护自然生态 周大福珠宝集团坚守“用真诚让幸福永恒“的企业理念 我们的百周年承诺包括对地球真诚且有效的付出服务 致力守护珍贵的大自然环境&#xff0c;为人类和星球幸福…

吉林优美姿文化:抖音怎么做爆款输出?

要知道&#xff0c;现在自媒体发展的越来越好了&#xff0c;其中发展的最好的就是抖音平台&#xff0c;大家如果要利用抖音平台达到引流的目的的话&#xff0c;也要去学习一下抖音相关的技巧&#xff0c;那么抖音怎么去买号呢&#xff1f;跟着吉林优美姿小编来一起看看吧&#…

亚马逊---人工智能入门---学习笔记

&#x1f680;write in front&#x1f680; &#x1f4dd;个人主页&#xff1a;认真写博客的夏目浅石. &#x1f381;欢迎各位→点赞&#x1f44d; 收藏⭐️ 留言&#x1f4dd;​ &#x1f4e3;系列专栏&#xff1a;蓝桥杯算法笔记 &#x1f4ac;总结&#xff1a;希望你看完之…

SpringBoot 的配置

目录 配置文件到底有什么作用呢 ? SpringBoot的配置文件的格式有哪些呢? properties配置文件 yml配置文件 properties乱码问题 多平台的配置文件设置 配置文件到底有什么作用呢 ? 配置文件主要是配置项目的一些重要的数据.. 比如配置数据库的连接信息 数据库是非常重…

虚拟机中如何安装Liunx环境

安装步骤 首先 准备一个Linux系统镜像 这是下载地址&#xff1a;https://cn.ubuntu.com/download/server/step1 然后打开虚拟机软件&#xff0c;点击新建 配置虚拟机名称 配置内存【建议4GB&#xff0c;内存小就少弄一顿】【再点击下一步】 硬盘配置 点击下一步 到这一步&am…

MVP、原型、概念验证,傻傻分不清楚?

MVP、原型以及概念验证这三者的概念虽然没有密切的联系&#xff0c;但也有不少人会分不清这三者的区别&#xff0c;在这篇文章中&#xff0c;我们会帮大家区分一下这三个概念。 首先是MVP&#xff0c;MVP是Minimum Viable Product的缩写&#xff0c;即最小可行性产品。MVP通过…

计算机网络---DHCP和自动配置

什么是DHCP HCP&#xff08;动态主机配置协议&#xff09;是一个局域网的网络协议&#xff0c;客户机 / 服务器协议。指的是由服务器控制一段IP地址范围&#xff0c;客户机登录服务器时就可以自动获得服务器分配的IP地址和子网掩码。默认情况下&#xff0c;DHCP作为Windows Se…

在SPDK中体验一下E810网卡ADQ直通车

早在2019年&#xff0c;Intel发布第二代Xeon Scalable系列处理器的同时&#xff0c;也推出了E800系列网卡。该网卡的亮点除了支持100Gb&#xff0c;便是新增了ADQ功能。1. 了解ADQADQ 全称Application Device Queues&#xff0c;是一种队列和控制技术&#xff0c;可提高应用程序…

44. 含并行连结的网络(GoogLeNet)

GoogLeNet吸收了NiN中串联网络的思想&#xff0c;并在此基础上做了改进。 这篇论文的一个重点是解决了什么样大小的卷积核最合适的问题。 毕竟&#xff0c;以前流行的网络使用小到1 * 1&#xff0c;大到11 * 11的卷积核。 本文的一个观点是&#xff0c;有时使用不同大小的卷积…

unreal engine 增强输入的使用分析

由于ue5以前的输入 系统已经提示被弃用了&#xff0c;因此建议使用新版本 首先 分别新建输入操作 新建映射情景 image.png打开新建的输入操作 根据下图可以得出结论&#xff0c;此东西用于描述 是何种类型映射&#xff0c;以及是否消耗事件 不传递 image.pngimage.png打开情景上…

用Python绘制一朵玫瑰花,送给特别的她

前言 哈喽哈喽&#xff0c;跨年倒计时三天九小时 上次发了烟花的文章&#xff0c;看来还是蛮多人需要代码的 今天就来搞一朵唯一的花吧~&#xff08;送给你喜欢的那个她&#xff09; 效果 话不多说 咱先直接看看效果&#xff0c;毕竟搞的不好看我也拿不出手 提前先说 我尽…

CANopen3.0-数据格式

一、CAN消息 一帧CAN消息的通信协议如下: 其中, id: CAN消息的标识符,通常是11bits rtr: 0–消息帧,普通消息;1–远程帧,远程传输请求消息,这种类型的消息不能包含数据帧; dn: 数据帧,一帧普通CAN消息包括0~8bytes数据 在CANOpen中需要自己实现CAN发送消息接口,类似…

小型水库水雨情监测预警自动测报平台 辅助水利在线监测水库水位+雨量

平升电子小型水库水雨情监测预警自动测报平台辅助水利管理部门实现水库雨水情信息“全要素、全量程、全覆盖”自动测报。系统具备水库水位、雨量、现场图像/视频等水文信息采集、传输、处理及预警广播等功能&#xff0c;有效提升了雨水情信息的时效性和准确度&#xff0c;为保障…

网络常见配置及Nmcli配置使用

1.查看网络配置 /etc/services 可以查看协议的tcp/udp端口 IP common ip addr show #查看设备或IP信息也可以通过ifconfig查询。 ip -s link show eno16777734 #可以发送或接收包的状态ip route #查看路由信息ping 测试通讯连接&#xff0c;用ctrlc结束 Meth : ping [opting]…