当前位置: 首页 > news >正文

容斥原理的并

文章目录

  • 简介
  • AcWing 890. 能被整除的数
    • 思路解析
    • CODE



简介

推荐题解:https://www.acwing.com/solution/content/126553/
画了图,清晰易懂,懒得打字了。
总之就是以下公式: S = S 1 + S 2 + S 3 − S 1 ∩ S 2 − S 1 ∩ S 3 − S 2 ∩ S 3 + S 1 ∩ S 2 ∩ S 3 \begin{align*} S = & S_1 + S_2 + S_3 \\ & - S_1 \cap S_2 - S_1 \cap S_3 - S_2 \cap S_3 \\ & + S_1 \cap S_2 \cap S_3 \end{align*} S=S1+S2+S3S1S2S1S3S2S3+S1S2S3
我们可以把这个式子推导到 n n n 维,奇加偶减。


AcWing 890. 能被整除的数

题目链接:https://www.acwing.com/activity/content/problem/content/960/

思路解析

筛出一个数的倍数,两个数的倍数 … n n n 个数的倍数,这就抽象成了 n n n 个集合的问题了。

那么如何表示选取哪几个集合(质数)呢?

  • 1 1 1 开始枚举到 n n n,将每个数看成二进制形式,如果说第 k k k 位是 1 1 1,那么就代表选第 k k k 个集合,反之不选。

如何知道被整除的数的个数?公式: n / p n / p n/p 下取整即可。

最后判断是奇数个还是偶数个,这个判断利用了二进制的一个性质:除了 2 0 2^0 20,其他所有位的和都是 2 2 2 的整数倍,所以说看是否为奇数就看它二进制最后一位是否为 1 1 1


CODE

#include <iostream>
#include <cstring>
#include <algorithm>using namespace std;typedef long long ll;  // 定义长整型别名为llconst int N = 20;  // 定义常量N为20
int n, m;  // 定义整型变量n和m
int p[N];  // 定义整型数组p,大小为Nint main(){scanf("%d%d", &n, &m);  	// 从输入中读取两个整数n和mfor(int i = 0; i < m; ++i) scanf("%d", &p[i]);  // 从输入中读取m个整数到数组p中int res = 0;  	// 初始化结果为0for(int i = 1; i < (1 << m); ++i){  // 遍历所有的子集int s = 0, t = 1;  	// 初始化s和tfor(int j = 0; j < m; ++j){  	// 遍历每一位if(i >> j & 1){  	// 如果第j位为1if((ll)t * p[j] > n){  	// 如果t乘以p[j]大于nt = -1;  	// 将t设置为-1break;  	// 跳出循环}t *= p[j];  // 更新ts++;  // 增加s}}if(t == -1) continue;  	// 如果t为-1,跳过当前循环if(s & 1) res += n / t;  // 如果s为奇数,增加n/t到reselse res -= n / t;  	// 否则,从res中减去n/t}cout << res << endl;  // 输出结果
}
http://www.lryc.cn/news/261923.html

相关文章:

  • JavaSE第7篇:封装
  • mysql数据库相关知识【MYSQL】
  • android studio 创建按钮项目
  • gitee提交代码步骤介绍(含git环境搭建)
  • 【MyBatis-Plus】常用的插件介绍(乐观锁、逻辑删除、分页)
  • DApp测试网络Ganache本地部署并实现远程连接
  • 好用的硬盘分区工具,傲梅分区助手 V10.2
  • 【华为鸿蒙系统学习】- HarmonyOS4.0开发|自学篇
  • Qt图像处理-Qt中配置OpenCV打开本地图片
  • HTML中RGB颜色表示法和RGBA颜色表示法
  • Openwrt源码下载出现“The remote end hung up unexpected”
  • Spring定时任务动态更改(增、删、改)Cron表达式方案实例详解
  • 常用登录加密之Shiro与Spring Security的使用对比
  • 获取文件路径里的文件名(不包含扩展名)
  • HiveSql语法优化二 :join算法
  • Leetcode—459.重复的子字符串【简单】
  • Mac安装Typora实现markdown自由
  • 前后端传参格式
  • 【后端学前端】第三天 css动画 动态搜索框(定位、动态设置宽度)
  • 51.0/表单(详细版)
  • 动态规划(Dynamic Programming)
  • linux使用文件描述符0、1和2来处理输入和输出
  • how to write and run .ps1
  • 如何在PHP中处理跨域请求?
  • spring boot 配置多数据源 踩坑 BindingException: Invalid bound statement (not found)
  • 【产品】Axure的基本使用(二)
  • Python语言学习笔记之十(字符串处理)
  • WPF-附加属性《十二》
  • 算法通关第十九关-青铜挑战理解动态规划
  • 2023 GitHub年度排行榜,JEECG上榜第三名,势头依然很猛~