如何证明组合数是整数

组合数取模进阶:从Lucas定理到ExLucas算法详解 组合数取模是算法竞赛和数论编程中的基础问题,其核心在于高效计算C(n, m) mod p。当模数p为质数时,Lucas定理通过将n和m转换为p进制表示,将大规模问题分解为一系列可预处理的小规模组合数计算,实现了从O(n)到O(log_p n)的优化。这一原理在模数较小但n、m极大的场景下极具技术价值,例如在网格路径计数、排列组合问题中广泛应用。然而,当模数为合数时,经典Lucas定理失效,此时需要引入扩展Lucas算法。ExLucas算法结合质因数分解和中国剩余定理,通过剥离阶乘中的p因子,解决了合数模数下 阅读详情

去洛谷看我的博客

前言

其实这是某大佬的 PPT 里的一个问题,觉得很有意思,就花了一些时间想了想。

问题

总所周知,组合数的数论定义式是 ( n − m + 1 ) × ( n − m + 2 ) × ⋯ × n 1 × 2 × 3 × ⋯ × m \frac {(n-m+1)\times (n-m+2)\times \cdots \times n} {1\times 2\times 3\times \cdots \times m} 1×2×3×⋯×m(n−m+1)×(n−m+2)×⋯×n​。

那么,仅通过这个定义式,如何证明组合数一定是整数呢?

证明

感性的证明

一个组合数,可以看成是连续的 m m m 个正整数的积除以 m ! m! m!。

那么,我们可以先找到所有 m ! m! m! 的质数,从小到大分别是 p 1 , p 2 , p 3 ⋯ p x p_1,p_2,p_3 \cdots p_x p1​,p2​,p3​⋯px​。

那么,我们可以考虑枚举质数。

对于质数 p i p_i pi​,包含了因子 p i p_i pi​ 的数,在 [ 1 , m ] [1,m] [1,m] 中应当有 ⌊ m p i ⌋ \lfloor \frac m {p_i} \rfloor ⌊pi​m​⌋ 个,在 [ n − m + 1 , n ] [n-m+1,n] [n−m+1,n] 中也应当有 ⌊ m p i ⌋ \lfloor \frac m {p_i} \rfloor ⌊pi​m​⌋ 个。

那么,把这些数全部除以 p i p_i pi​。

再考虑包含了因子 p i 2 {p_i}^2 pi​2 的数,在两个区间都应该有 ⌊ m p i 2 ⌋ \lfloor \frac m {{p_i}^2} \rfloor ⌊pi​2m​⌋ 个,同样全部除掉。

再考虑 p i 3 {p_i}^3 pi​3 一直到 p i k {p_i}^k pi​k,这样的话,我们就可以发现可以完全地把质因子 p i p_i pi​ 的影响消去。

所以当我们把所有的质因子全部消去时,分母就是 1 1 1,分子还剩下一些 > p x >p_x >px​ 的质因子,所以一定是整数。

严谨的证明

上面的证明,我自己感觉比较正确,但是感觉不够数学,所以又想了一种大概是归纳法的证明方法。

我们考虑证明 m = i m=i m=i 的情况,假设 m < i m<i m<i 的情况都已经证明一定正确。

再构造两个数列 a a a 和 b b b,最开始,都是 { 1 , 2 , 3 ⋯ i } \{1,2,3\cdots i\} {1,2,3⋯i}。

把序列 a a a 的积看作分子,序列 b b b 的积看作分母,那么这个比值就对应某个组合数,通过把 a a a 整体加上一个数,来表示所有的 m = i m=i m=i 的组合数。

首先,原始的序列 a a a,对应 n = i n=i n=i 的情况,并且一定是整数。

现在考虑 n = i + 1 n=i+1 n=i+1 的情况,也就是把序列 a a a 整体加上 1 1 1 的情况。

我们可以把中间 i − 1 i-1 i−1 个相同的数都消去,这样序列 a a a 仅留下 i + 1 i+1 i+1,序列 b b b 仅留下 1 1 1,这个显然是整数对吧,不过,我们眼光还要放长远一些,这个不就是 m = 1 m=1 m=1 的组合数吗?因为 m < i m<i m<i 的组合数我们都看作已经证明是整数了,所以这种情况是对的。

再把序列 a a a 加 1 1 1,那么这一次序列 a a a 留下的是 { i + 1 , i + 2 } \{i+1,i+2\} {i+1,i+2},序列 b b b 留下的是 { 1 , 2 } \{1,2\} {1,2},这又对应 m = 2 m=2 m=2 的组合数,也是证明过的。

再不断地把 a a a 加 1 1 1,可以分别对应 m = k , k ∈ [ 1 , i − 1 ] m=k,k\in [1,i-1] m=k,k∈[1,i−1] 的所有组合数情况。

但是,当 a a a 加了 i i i 次时,就没有可以对应的了,这该怎么证明呢?

可以先看看 i − 1 i-1 i−1 次的时候,序列 a a a 是 { i , i + 1 , ⋯   , 2 × i − 1 } \{i,i+1,\cdots,2\times i -1\} {i,i+1,⋯,2×i−1},序列 b b b 是 { 1 , 2 , 3 ⋯   , i } \{1,2,3\cdots,i\} {1,2,3⋯,i}。

因为对应了 m = i − 1 m=i-1 m=i−1 的组合数,所以一定是整数,这个时候,再把序列 a a a 都加上 1 1 1,可以等价地看作去掉 i i i,加上 2 × i 2\times i 2×i,所以序列 a a a 的积扩大了两倍,也一定是整数。

那么,再往后面继续加 1 1 1,证明方式也同理,所以我们证明得到了 m = i m=i m=i 的组合数都一定是整数,再继续证明 m = i + 1 m=i+1 m=i+1,后续都一定可以证明,所以推广到 m m m 是任意数,组合数都一定是整数,证明完毕。

UHPC的疲劳计算——兼论ModelCode2010的适用性 ModelCode2010的混凝土疲劳计算方法是适用于UHPC的。 阅读详情

相关推荐

解决用加速器以后,电脑无法连接网络的问题

相信很多朋友也遇到过,用加速器以后,电脑网络直接断了,或者访问外网时打不开的情况解决办法是。

qq_46368050的博客 1万+

证明组合数c(n,m)是整数

这样在求组合数的时候为了防止中间过程越界,可以c(m,n)=c(m-1,n-1)*m/n int C(intn,int m) {    if(m==0)        cout"1"endl;    else if (m>n)        cout"0"endl;    else    {        int c(1);        for(int i=1;in-

WonSoon的专栏 5357

QGIS v3.28 高效加载OSM在线地图的三种实用方法

本文详细介绍了在QGIS v3.28中高效加载OSM在线地图的三种实用方法:通过XYZ Tiles直接连接、使用QuickMapServices插件以及配置WMS/WTMS服务。针对每种方法提供了具体操作步骤、常见问题解决方案和性能优化建议,帮助用户根据需求选择最适合的方案,提升GIS工作效率。

weixin_29233333的博客 433

从组合数说开去

组合数\[C_{n}^{r}=\frac{n!}{r!\left( n-r \right)!}\]是计数的时候引入的,这个数必然是整数,这是显然的。 但表达式$\frac{n!}{r!\left( n-r \right)!}$ 为什么一定是整数呢?答案却没有那么显然。 \[\frac{n!}{r!\left( n-r \right)!}=\frac{n(n-1)(n-2)(n-3)....

weixin_30650859的博客 276

从零配置华为S5720交换机VLAN:Web界面与命令行双模式详解(附拓扑图)

本文详细解析华为S5720交换机VLAN配置的全过程,涵盖Web界面与命令行(CLI)双模式操作指南。从基础环境准备到多交换机环境配置同步,特别针对S5720-52X系列交换机的VLANif接口、端口分配策略及交换机堆叠技术进行深入讲解,并附实用拓扑图与配置示例,助力企业网络管理员高效完成VLAN部署。

happy2的博客 1370

小新学习K8s第一天之K8s基础概念

kubernetes是一个可移植,可扩展的开源平台,用于管理容器化工作负载和服务,有助于声明式配置和自动化。它拥有庞大且快速发展的生态系统。kubernetes服务,支持和工具随处可见。作用:用于自动部署,扩展和管理“容器化应用程序”的开源系统。可以理解成k8s是负责自动化运维管理多个容器化程序(比如docker)的集群,是一个生态及其丰富的容器编排框架工具。

pangdongqiqi的博客 1228

Witt向量简介 §4.1:关于组合数是整数的一种严格证明

内含一个前置引理和最终的组合数是整数定理。

只想躺平不想动 966

玩转Docker | 使用Docker部署Trilium Notes知识库工具

玩转Docker | 使用Docker部署Trilium Notes知识库工具

qq_59334230的博客 1441

组合数计算

华为笔试题里出现了组合数计算的问题,在此记录一下解法: 求的核心公式是 这个公式可以从直观上很好地理解:从n个物品里选k个的方法数,等于 选第n个物品,在前n-1个物品里选k-1个的方法数 + 不选第n个物品,在前n-1个物品里选k个的方法数。也可以从杨辉三角中推出。 那么求组合数的问题就变成了动态规划问题: 这样计算可以有效避免求组合数时乘法溢出。 如果只需要求固定n的,那么可以进一步优化空间到一维:,注意 j 要从右向左更新。 int cnk[MAXN] = {0}; .

HackingGate的博客 809

MATLAB离线附加功能包下载与安装教程

本文介绍如何下载与安装MATLAB离线附加功能包,便于大家更加高效的使用MATLAB。

加斯顿工程师的博客 1万+

基于 FPGA 的 CNN 卷积神经网络之池化层 Verilog 实现

池化层是卷积神经网络(CNN)中的关键组件,用于降低特征图的维度,减少计算量和防止过拟合。常见的池化操作包括最大池化和平均池化。FPGA 提供了高效的并行处理能力,可以加速这些操作。池化层在 CNN 中扮演重要角色,通过降低数据维度提升计算效率。在 FPGA 上实现池化层,可以充分利用硬件资源实现高效的并行计算,有助于提高实时应用中的推理速度。

走向CTO的路上... 1256

数学知识——求组合数(四种方法)

递推法 例题:求组合数Ⅰ 给定n组询问,每组询问给定两个整数a,b,请你输出Cab mod (109+7)的值。 输入格式 第一行包含整数n。 接下来n行,每行包含一组a和b。 输出格式 共n行,每行输出一个询问的解。 数据范围 1≤n≤10000, 1≤b≤a≤2000 输入样例: 3 3 1 5 3 2 2 输出样例: 3 10 1 #include <iostream> #include <algorithm> using namespace std; const in.

优快云729180099的博客 4188

2024-12月js逆向案例-sensor-data之vmp字段之akamai_2/3.0-(下)

akamai2/3的vmp字段逆向分析

十一姐的博客 3145

数论之Lucas定理及证明过程

转自这里 http://blog.youkuaiyun.com/m674019130/article/details/76149170         Lucas定理主要用于组合数取模。 <span class="math" id="MathJax-Span-1" style="width: 16.269em; display: inline-block;"><span sty

卡西莫多 732

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

【组合数学/计算机数学】 作业 第二章 鸽巢原理

x1​x2​x3​x4​180≤x1​≤50≤x2​≤65≤x3​≤92≤x4​≤10令y1​x1​y2​x2​y3​x3​−5y4​x4​−2,则0≤y1​≤50≤y2​≤60≤y3​≤40≤y4​≤8,满足y1​y2​y3​y4​11。原问题转化为:求5⋅y1​6⋅y2。

zombotany的博客 673

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Lucas定理 原理、证明及代码模板

一、定理 对于素数p,及正整数a、b,当求组合数CabC_a^bCab​对p取余时,如果a和b很大(1≤b≤a≤1015)(1≤b≤a≤10^{15})(1≤b≤a≤1015),而p相对较小(1≤p≤105)(1≤p≤10^5)(1≤p≤105)时,我们用Lucas定理来求。 结论:Cab≡Capbp⋅Ca%pb%pC_{a}^{b}\equiv C_{\frac ap}^{\frac bp}\cdot C_{a\%p}^{b\%p}Cab​≡Cpa​pb​​⋅Ca%pb%p​ (mod p) 二、证明 首

harry12138小白的博客 762

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Lucas定理的一个证明

For non-negative integers m and n and a prime p, the following congruence relation holds: where and are the base p expansions of m and n respectively.   首先我们注意到 n=(ak...a2,a1,a0)p  =  (ak

1896

大于3小于4的整数bleem_正整数的性质 C5

点击上方“蓝字”,发现更多精彩。质数与合数19. 有多少个正整数除 152,余数为 8?解: 一个正整数除 152,余数为 8,则这个数一定是152-8=144 的约数.问题转化为:求 144 的约数中,大于 8 的约数个数.152-8=144=24×3²,共有 (4+1)×(2+1)=15 个约数.其中 6 个约数1、2、3、4、6、8不大于 8.所以符合题意的数共有 15-8=7 个...

weixin_42116805的博客 918

卢卡斯定理(详细证明)

卢卡斯定理问题内容:时间复杂度证明给个定理:证明定理:再来个推论:所以我们就可以推出结论:模板题目Luogu3807【模板】卢卡斯定理[P2480 [SDOI2010]古代猪文(CRT+Lucas)](https://www.luogu.com.cn/problem/P2480) 问题 求解取模组合数(nm)≡x(mod p)\binom nm\equiv x(mod ~p)(mn​)≡x(mod p),其中n,mn,mn,m较大不适用于打表找阶乘,模数p较小且为素数。 内容: (nm)

weixin_45363113的博客 1318

[数学题] 证明:(km+1)(km+2)...(km+m)能整除m!( k是一个整数)

 证明: 1. (km+1)(km+2)...(km+m) = (km+m)! / (km)!               2. (km+1)(km+2)...(km+m) / m! = (km+m)! / ((km)!m!)                       =c(km+m,m) 

毛C毛Py的专栏 807

Lucas定理推导过程(全网最全,哈哈哈哈)

Lucas定理详细推导

Cai_Haiq的博客 1465

第五届蓝桥杯预赛练习——买不到的数字

算法思想:这是一道数论的题,表示最大不能组合数,即:(x-1)*(y-1)-1  如何证明的呢:看下面: 设自然数a,b互质,则不能表示成ax+by(x,y为非负整数)的最大整数是ab-a-b。 证明: a或者b是1的情况下容易证明。 以下情况都是a>1且b>1的情况。 首先证明ab-a-b不能表示成ax+by 假设ab-a-b=ax+by,那么ab=am+bn (m,n都大于等于

GS_MY的专栏 1038

【叨叨叨】数学自习的一道题

我的想法是这样的:首先是大于2的正整数至少使式子的分母不等于0。然后由题意知假使最小的数是3,结果为1*2*3*4*5=120......多试几个数会发现,当n等于后面的数时,结果都会是前一位的整数倍(因式分解完了,当时我就在想怎么样才能使120整除,趴在桌子上,观察这个式子发现了一个东西...可以看到各因式间相差1,接着就联想到了阶乘,然后就各种瞎想,还想了下前缀和,最后又把式子写成了。以下我瞎写的,120为例,连续数的乘积必有2的倍数,3的倍数,是4的倍数,是5的倍数。来到了一片知识盲区。

Eleven_Chen2008的博客 808

【蓝桥杯】不可能的数目

买不到的数目 题目: 小明开了一家糖果店。他别出心裁:把水果糖包成4颗一包和7颗一包的两种。糖果不能拆包卖。 小朋友来买糖的时候,他就用这两种包装来组合。当然有些糖果数目是无法组合出来的,比如要买 10 颗糖。 你可以用计算机测试一下,在这种包装情况下,最大不能买到的数量是17。大于17的任何数字都可以用4和7组合出来。 本题的要求就是在已知两个包装的数量时,求最大不能组合出的数字。 输入: 两个正整数,表示每种包装中糖的颗数(都不多于1000) 要求输出: 一个正整数,表示最大不能买到的糖数 例如: 用户

tuzkizki的博客 404

【组合数学】生成函数 ( 正整数拆分 | 重复有序拆分 | 不重复有序拆分 | 重复有序拆分方案数证明 )

一、重复有序拆分、 二、不重复有序拆分、 1、无序拆分基本模型、 2、全排列、 三、重复有序拆分方案数证明、

让 学习 成为一种 习惯 ( 韩曙亮 の 技术博客 ) 3283
上一篇: CF1883G2 Dances (Hard Version)
下一篇: CF1883D In Love
AuroraWind
博客等级 码龄4年 47粉丝 109原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值