笔记---容斥原理

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.rhkb.cn/news/250499.html

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

相关文章

element-ui link 组件源码分享

link 组件的 api 涉及的内容不是很多&#xff0c;源码部分的内容也相对较简单&#xff0c;下面从以下这三个方面来讲解&#xff1a; 一、组件结构 1.1 组件结构如下图&#xff1a; 二、组件属性 2.1 组件主要有 type、underline、disabled、href、icon 这些属性&#xff0c;…

Golang `crypto/hmac` 实战指南:代码示例与最佳实践

Golang crypto/hmac 实战指南&#xff1a;代码示例与最佳实践 引言HMAC 的基础知识1. HMAC 的工作原理2. HMAC 的应用场景 Golang crypto/hmac 库概览1. 导入和基本用法2. HMAC 的生成和验证3. crypto/hmac 的特性 实战代码示例示例 1: 基本的 HMAC 生成示例 2: 验证消息完整性…

C语言:内存函数(memcpy memmove memset memcmp使用)

和黛玉学编程呀------------- 后续更新的节奏就快啦 memcpy使用和模拟实现 使用 void * memcpy ( void * destination, const void * source, size_t num ) 1.函数memcpy从source的位置开始向后复制num个字节的数据到destination指向的内存位置。 2.这个函数在遇到 \0 的时候…

STM32 有源蜂鸣器

模块介绍: 结构&#xff1a;有源蜂鸣器通常由一个振膜和一个驱动电路组成。振膜是负责产生声音的部分&#xff0c;而驱动电路则负责控制振荡频率和幅度。 工作原理&#xff1a;有源蜂鸣器的驱动电路会向振膜施加电压&#xff0c;使其振动产生声音。驱动电路可以根据输入信号的…

阿里云a10GPU,centos7,cuda11.2环境配置

Anaconda3-2022.05-Linux-x86_64.sh gcc升级 centos7升级gcc至8.2_centos7 yum gcc8.2.0-CSDN博客 paddlepaddle python -m pip install paddlepaddle-gpu2.5.1.post112 -f https://www.paddlepaddle.org.cn/whl/linux/mkl/avx/stable.html 报错 ImportError: libssl.so…

基于Springboot的高校心理教育辅导设计与实现(有报告)。Javaee项目,springboot项目。

演示视频&#xff1a; 基于Springboot的高校心理教育辅导设计与实现(有报告)。Javaee项目&#xff0c;springboot项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构&#xff0c;…

flask基于django大数据的证券股票分析系统python可视化大屏

证券分析系统采用B/S架构&#xff0c;数据库是MySQL。网站的搭建与开发采用了先进的Python进行编写&#xff0c;使用了Django框架。该系统从两个对象&#xff1a;由管理员和用户来对系统进行设计构建。主要功能包括&#xff1a;个人信息修改&#xff0c;对股票信息、股票买入、…

深度学习——pycharm远程连接

目录 远程环境配置本地环境配置&#xff08;注意看假设&#xff01;&#xff01;!这是很多博客里没写的&#xff09;步骤1步骤2步骤2.1 配置Connection步骤2.2 配置Mappings 步骤3 配置本地项目的远程解释器技巧1 pycharm中远程终端连接技巧2 远程目录技巧3 上传代码文件技巧4 …

【无标题】yarn报错 “https://registry.npm.taobao.org/...: certificate has expired“如何处理

前言 今天在jenkins打包项目时yarn打包报错&#xff0c;查看log发现npm淘宝镜像报错 原因 在 1 月 22 日&#xff0c;淘宝原镜像域名&#xff08;registry.npm.taobao.org&#xff09;的 HTTPS 证书正式到期。如果想要继续使用&#xff0c;需要将 npm 源切换到新的源&#…

【LVGL环境搭建】

LVGL环境搭建 win模拟器环境搭建一.二.三.四.五. Ubuntu模拟器环境搭建一. 前置准备二. 下载LVGL Source code&#xff1a;三. 安装sdl2&#xff1a;四. 开启VScode执行五. 安装扩展套件六. 按F5执行七. 执行结果 win模拟器环境搭建 一. 二. 三. 四. 五. Ubuntu模拟器环境…

深入理解指针(3)

⽬录 1. 字符指针变量 2. 数组指针变量 3. ⼆维数组传参的本质 4. 函数指针变量 5. 函数指针数组 6. 转移表 1. 字符指针变量 在指针的类型中我们知道有⼀种指针类型为字符指针 char* ; ⼀般使⽤: int main() {char ch w;char *pc &ch;*pc w;return 0; } 还有…

Unity | YooAssetV2.1.0 + HybridCLR热更新

目录 一、项目更改 二、使用YooAsset热更 1.资源配置 2.资源构建 3.将两个文件夹下的资源上传CDN服务器 4.修改代码 5.运行效果 本文记录利用YooAssetHybridCLR来进行资源和dll的更新。YooAsset使用的是新版V2.1.0。相比于旧版&#xff0c;dll(原生文件)和资源要建两个p…

opencv0014 索贝尔(sobel)算子

前面学习的滤波器主要是用来模糊图像&#xff0c;今天一起来了解关于边缘识别的滤波吧&#xff01;嘿嘿 边缘 边缘是像素值发生跃迁的位置&#xff0c;是图像的显著特征之一&#xff0c;在图像特征提取&#xff0c;对象检测&#xff0c;模式识别等方面都有重要的作用。 人眼如…

【课程作业_01】国科大2023模式识别与机器学习实践作业

国科大2023模式识别与机器学习实践作业 作业内容 从四类方法中选三类方法&#xff0c;从选定的每类方法中 &#xff0c;各选一种具体的方法&#xff0c;从给定的数据集中选一 个数据集&#xff08;MNIST&#xff0c;CIFAR-10&#xff0c;电信用户流失数据集 &#xff09;对这…

SpringBoot+Redis如何实现用户输入错误密码后限制登录(含源码)

点击下载《SpringBootRedis如何实现用户输入错误密码后限制登录&#xff08;含源码&#xff09;》 1. 引言 在当今的网络环境中&#xff0c;保障用户账户的安全性是非常重要的。为了防止暴力破解和恶意攻击&#xff0c;我们需要在用户尝试登录失败一定次数后限制其登录。这不…

51单片机学习笔记 --步进电机驱动说明

文章目录 工作原理代码编写驱动方式全步进驱动半步进驱动微步进驱动 工作原理 工作原理简要说明&#xff0c;和单片机一起配合使用的步进电机多为28BYJ28 五线四相步进电机&#xff0c;配合ULN2003驱动板进行控制&#xff0c;如图所示&#xff0c;对于扭矩、精度要求较高的还有…

如何手机搜中国大学mooc答案?推荐9个搜题软件和学习工具 #经验分享#其他

以下软件拥有强大的搜索功能&#xff0c;能够快速找到与题目相关的资料和答案&#xff0c;让大学生们更容易理解和掌握知识点。 1.Google翻译 可提供简体中文和另外 100 多种语言之间的互译功能&#xff0c;可让您即时翻译字词、短语和网页内容 Google的免费翻译服务 2.大鱼…

嵌入式软件中常见的 8 种数据结构

数据结构是一种特殊的组织和存储数据的方式&#xff0c;可以使我们可以更高效地对存储的数据执行操作。数据结构在计算机科学和软件工程领域具有广泛而多样的用途。 几乎所有已开发的程序或软件系统都使用数据结构。此外&#xff0c;数据结构属于计算机科学和软件工程的基础。当…

C语言之位段练习

一、题目 下面代码的运行结果为&#xff1f; int main() {unsigned char puc[4];struct tagPIM{unsigned char ucPim1;unsigned char ucData0 : 1;unsigned char ucData1 : 2;unsigned char ucData2 : 3;}*pstPimData;pstPimData (struct tagPIM*)puc;memset(puc,0,4);pstPi…

Unity_使用Shader实现玻璃和镜面效果

效果图如下&#xff1a; 玻璃效果图 镜面效果图 Step1 搭建场景→镜子使用Quad代替&#xff0c;放置在需要反射的墙面→创建新的材质和Shader Step2 墙壁外创建Camera&#xff0c;用来渲染物体后方的视图→创建RenderTexture&#xff0c;赋于该相机 Step3 Shader的编写如下…