c语言容斥原理,容斥原理 | 易学教程
容斥原理
\(|A_1\cup A_2\cup...\cup A_n|=\sum\limits_{1\le i\le n}|A_i|-\sum\limits_{1\le i
二项式反演
形式1
\(f_i=\sum_{j=k}^n C(i,j)*g_j \Leftrightarrow g_i=\sum_{j=k}^n (-1)^{i-j}*C(i,j)*f_j\)
形式2
\(f_i=\sum_{j=k}^n (-1)^j*C(i,j)*g_j \Leftrightarrow g_i=\sum_{j=k}^n (-1)^j*C(i,j)*f_j\)
证明1
\(|A_1\cup A_2\cup...\cup A_n|=\sum\limits_{1\le i\le n}|A_i|-\sum\limits_{1\le i
\(\Rightarrow |\complement A_1\cap \complement A_2\cap...\cap \complement A_n|=|S|-\sum\limits_{1\le i\le n}|A_i|+\sum\limits_{1\le i
\(\Rightarrow |A_1\cap A_2\cap...\cap A_n|=|S|-\sum\limits_{1\le i\le n}|\complement A_i|+\sum\limits_{1\le i
假设现在交集的大小仅是关于集合个数的函数,
设\(f_n\)表示\(|A_1\cap A_2\cap...\cap A_n|\),\(g_n\)表示\(|\complement A_1\cap
\complement A_2\cap...\cap \complement A_n|\),且\(f(0)=g(0)=|S|\),则
\(f_i=\sum_{j=0}^i (-1)^j*C(i,j)*g_j\)
\(g_i=\sum_{j=0}^i (-1)^j*C(i,j)*f_j\)
形式2得证,证明形式1只需代换即可.
对于\(\sum_{j=k}^i\)的情况,请看证明2.
证明2
对于形式1,把\(f_i\)代入右侧式子得
\(g_i=\sum_{j=k}^i (-1)^{i-j}*C(i,j)*\sum_{l=k}^j C(j,l)*g_l\)
\(=\sum_{l=k}^i \sum_{j=l}^i (-1)^{i-j}*C(i,j)*C(j,l)*g_l\)
\(=\sum_{l=k}^i \sum_{j=l}^i (-1)^{i-j}*\frac{i!}{j!(i-j)!}*\frac{j!}{l!(j-l)!}*g_l\)
\(=\sum_{l=k}^i \sum_{j=l}^i (-1)^{i-j}*\frac{(i-l)!}{(i-j)!(j-l)!}*\frac{i!}{(i-l)!l!}*g_l\)
\(=\sum_{l=k}^i C(i,l)*g_l*\sum_{j=l}^i (-1)^{i-j}*C(i-l,j-l)\)
当\(i\neq l\)时,由二项式定理,得\(\sum_{j=l}^i (-1)^{i-j}*C(i-l,j-l)=(1-1)^{i-l}=0\)
当\(i=l\)时,\(\sum_{j=l}^i (-1)^{i-j}*C(i-l,j-l)=1\)
\(\therefore g_i=[i=l]*C(i,l)*g_l=g_i\),得证.
习题
A. HDU 4135
求 \([A,B]\) 中有多少个数与 \(N\) 互质。 \(A,B\le 10^{15},N\le 10^9\)
解
\(O(\sqrt n)\) 找出 \(n\) 的所有质因子,然后指数级容斥。可以证明质因子个数不会超过15个。
B. HDU 4059
\(T\le 1000\) 组询问,给定 \(n\) ,求与 \(n\) 互质的数的四次方和。
解
\(O(\sqrt n)\) 找出 \(n\) 的所有质因子,然后指数级容斥。可以证明质因子个数不会超过6个。
C. HDU 5201
有 \(n\) 件物品, \(m\) 个人,现在要把物品分给人,要求没有一个人拿到的物品数大于等于第一个人拿到的物品数。求方案数。多组数据。 \(T\le 25,n,m\le 10^5\)
解
先枚举第一个人拿到的物品数 \(i\)。
然后就要求把 \(n-i\) 个物品分给 \(m-1\) 个人且每个人不能超过 \(i\) 的方案数。
来源:https://www.cnblogs.com/BlogOfchc1234567890/p/10885615.html
c语言容斥原理,容斥原理 | 易学教程相关推荐
- 鼠标绘图 c语言,c语言高级编程技术教程 图形显示方式与鼠标输入.doc
c语言高级编程技术教程 图形显示方式与鼠标输入 c语言高级编程技术教程 图形显示方式和鼠标输入 图形显示方式和鼠标输入 问题的提出编写程序,使用鼠标进行如下操作:按住鼠标器的任意键并移动,十字光 标将 ...
- 单片机独立式按键c语言程序,(原创)51单片机C语言程序设计--速学教程实例(入门篇)之独立按键(查询)...
(原创)51单片机C语言程序设计--速学教程实例(入门篇)之独立按键(查询) /************************************************************ ...
- c语言指针数组课件,C语言指针与数组教程课件.ppt
C语言指针与数组教程;教学要求;本章主要内容;引子;#include void swap ( int x, int y ) { printf("调用时:x地址为:%p, 值为:%d\n&qu ...
- mysql c语言教程,C语言调用mysql快速教程(精华篇).pdf
C语言调用mysql快速教程(精华篇).pdf ,使用 语言操作 之前,先在 里头创建一个数据库,一个表,在表里头添加 1 c mysql mysql 数据如下: 创建数据库,库名为 cusemysq ...
- c语言周林答案,C语言程序设计实训教程教学课件作者周林ch04结构化程序设计课件.ppt...
C语言程序设计实训教程教学课件作者周林ch04结构化程序设计课件.ppt * * 4.1 选择结构程序设计 4.2 循环结构程序设计 4.3 辅助控制语句 第四章 结构化程序设计 4.1 选择结构程序 ...
- c语言程序设计基础项目教程,C语言程序设计基础项目教程
摘要: <C语言程序设计基础项目教程/高职高专计算机教学改革新体系规划教材>通过项目实例,重点讲解C语言结构化程序设计的基本思想,方法和解决实际问题的技巧,培养学习者设计,分析应用程序的能 ...
- R语言七天入门教程二:认识变量与运算符
R语言七天入门教程二:认识变量与运算符 一.什么是变量 1.变量 顾名思义,我们可以将变量理解为"可以改变的量",是计算机语言中能储存计算结果或能表示值的抽象概念.这里的值可以是数 ...
- c语言程序设计工作任务,C语言程序设计任务驱动教程
<高等院校计算机任务驱动教改教材:C语言程序设计任务驱动教程>强调动脑.动手,强调"做中学.做中会".每个教学单元的语法知识条理化,程序编写渐进化,通过"知识 ...
- 《安富莱嵌入式周报》第283期:全开源逆向“爆破”硬件工具,Linux内核6.1将正式引入RUST语言,I3C培训教程,80款市场成熟的电感式位置传感器设计
往期周报汇总地址:嵌入式周报 - uCOS & uCGUI & emWin & embOS & TouchGFX & ThreadX - 硬汉嵌入式论坛 - P ...
- R语言时间序列ARIMA新手教程
R语言时间序列ARIMA新手教程 首先说一下ARMA回归的底层逻辑,所谓的AR模型和MA模型都是ARMA模型的一种特殊情况,有点类似正方形和长方形都是矩形.ARMA模型的表达式为: p为自回归部分的滞 ...
最新文章
- 清空python的变量
- 玩转OpenVswitch 简介
- CCCatmullRomBy和CCPointArray
- 去哪里学习python_Python从哪里开始学?怎么入门?
- 创建自已的sql函数
- 【大数据学习-hadoop1】大数据如何处理
- (97)Verilog HDL:秒灯设计
- Ajax请求返回200 OK,但是会引发错误事件而不是成功
- Android消除Toast延迟显示
- 图文并茂!CIC滤波器的FPGA实现
- HTML 编辑器简介
- Win 双网卡上网冲突,网络设置
- 搭建ORB_SLAM3在Linux下的编译和运行环境
- SEO人员必备技术有哪些
- AI轻松入门,AI零基础入门,AI初级教学,
- html分列代码,科学网—EXCEL 分列 (TextToColumns) 的C#代码 - 丁祥欢的博文
- Windows: Ctrl,Alt, Shift等快捷键的含义
- webp 动画 android,Android加载animated webp的控制和Glide加载GIF
- 自动驾驶决策规划算法第一章笔记 忠厚老实的老王
- 集成方法:渐进梯度回归树GBRT(迭代决策树)