c语言位运算 判断一个数的奇偶性,组合数奇偶性判断 应用位运算方法
公式P是指排列,从N个元素取R个进行排列(即排序)。 (P是旧用法,现在教材上多用A,Arrangement)
公式C是指组合,从N个元素取R个,不进行排列(即不排序)。
组合数的奇偶性判定方法为:
结论:
对于C(n,k),若n&k == k 则c(n,k)为奇数,否则为偶数。
证明:
利用数学归纳法:
由C(n,k) = C(n,k-1) + C(n-1,k-1);
对应于杨辉三角:
1
1 2 1
1 3 3 1
1 4 6 4 1
………………
可以验证前面几层及k = 0时满足结论,下面证明在C(n-1,k)和C(n-1,k-1) (k > 0) 满足结论的情况下,
C(n,k)满足结论。
1).假设C(n-1,k)和C(n-1,k-1)为奇数:
则有:(n-1)&k == k;
(n-1)&(k-1) == k-1;
由于k和k-1的最后一位(在这里的位指的是二进制的位,下同)必然是不同的,所以n-1的最后一位必然是1
。
现假设n&k == k。
则同样因为n-1和n的最后一位不同推出k的最后一位是1。
因为n-1的最后一位是1,则n的最后一位是0,所以n&k != k,与假设矛盾。
所以得n&k != k。
2).假设C(n-1,k)和C(n-1,k-1)为偶数:
则有:(n-1)&k != k;
(n-1)&(k-1) != k-1;
现假设n&k == k.
则对于k最后一位为1的情况:
此时n最后一位也为1,所以有(n-1)&(k-1) == k-1,与假设矛盾。
而对于k最后一位为0的情况:
则k的末尾必有一部分形如:10; 代表任意个0。
相应的,n对应的部分为: 1{*}*; *代表0或1。
而若n对应的{*}*中只要有一个为1,则(n-1)&k == k成立,所以n对应部分也应该是10。
则相应的,k-1和n-1的末尾部分均为01,所以(n-1)&(k-1) == k-1 成立,与假设矛盾。
所以得n&k != k。
由1)和2)得出当C(n,k)是偶数时,n&k != k。
3).假设C(n-1,k)为奇数而C(n-1,k-1)为偶数:
则有:(n-1)&k == k;
(n-1)&(k-1) != k-1;
显然,k的最后一位只能是0,否则由(n-1)&k == k即可推出(n-1)&(k-1) == k-1。
所以k的末尾必有一部分形如:10;
相应的,n-1的对应部分为: 1{*}*;
相应的,k-1的对应部分为: 01;
则若要使得(n-1)&(k-1) != k-1 则要求n-1对应的{*}*中至少有一个是0.
所以n的对应部分也就为 : 1{*}*; (不会因为进位变1为0)
所以 n&k = k。
4).假设C(n-1,k)为偶数而C(n-1,k-1)为奇数:
则有:(n-1)&k != k;
(n-1)&(k-1) == k-1;
分两种情况:
当k-1的最后一位为0时:
则k-1的末尾必有一部分形如: 10;
相应的,k的对应部分为 : 11;
相应的,n-1的对应部分为 : 1{*}0; (若为1{*}1,则(n-1)&k == k)
相应的,n的对应部分为 : 1{*}1;
所以n&k = k。
当k-1的最后一位为1时:
则k-1的末尾必有一部分形如: 01; (前面的0可以是附加上去的)
相应的,k的对应部分为 : 10;
相应的,n-1的对应部分为 : 01; (若为11,则(n-1)&k == k)
相应的,n的对应部分为 : 10;
所以n&k = k。
由3),4)得出当C(n,k)为奇数时,n&k = k。
综上,结论得证!
c语言位运算 判断一个数的奇偶性,组合数奇偶性判断 应用位运算方法相关推荐
- python 如何判断一个数为整数?(判断整数,没有小数)(取余)判断整型 isinstance()
方法1 判断是否为整数(即使不为整型) # -*- coding: utf-8 -*- """ @File : test.py @Time : 2020/6/25 11: ...
- C语言(CED)判断一个数是否是2的整数幂的简便方法!
正如大家所熟知的那样,我们输入到计算机中的数据,都是以二进制的格式保存处理的,所以此方法就是利用这一特点来进行判别!(除2的零次方) 将2的整数幂次方转换为二进制后,仔细观察后会很容易发现一个特点:整 ...
- 在标准c语言中 =是判断两个数是否相等,='运算符用于判断两个数是否相等。
"始于事亲",运算于判是指从小就要尊敬和孝顺自己的父母双亲,以及关爱与自己有血缘关系的兄弟姐妹等亲人,这是一个人行孝的开始阶段. 符用空巢老人生活特点( ). 断两老人常见的情绪反 ...
- C语言题目:输入一个数,将它的每一位按顺序打印出来
完成这个题目,首先想想该怎么去做. 我们知道一个数对10取余可以得到个位,除以十可以去掉个位,获得十位以上的数字 比如 12%10=2 12/10 = 1 所以我们可以根据这个方法写出这个程序,但是我 ...
- 【javascript输入一个数判断这个数是否为素数】判断素数
判断素数 什么是素数:素数是指质数,一个大于1的自然数,除了1和它自身外,不能整除其他自然数的数叫做质数:否则称为合数.所以我们可以利用这个性质来判断这个数是否为素数. 基本代码: css部分: .b ...
- 判断三个数是否构成三角形并判断三角形类型
上机题一 题目: 从键盘上输入三个数,判断能否构成三角形,如不能,给出提示:如能,求出对应三角形的面积,并判断该三角形是锐角三角形还是钝角三角形还是直角三角形,输出对应结论. #include< ...
- 如何通过三视图判断立方体个数_由三视图comma;判断小正方体个数
由三视图, 判断小正方体个数问题 通过小正方体组合图形的三视图,确定组合图形中小正方体的个数,在中考或竞赛中经常会遇到.解决这类问题如果没有掌握正确的方法,仅仅依赖空间想象去解决,不仅思维难度很大,还 ...
- python怎么判断一个数是不是正整数_Python如何判断一个正整数是否是素数?
素数(Prime Number),又称质数,一个大于1的自然数,除了1和它自身外,不能整除其他自然数的数叫做质数:否则,称为合数(Composite Number).1既不是素数,也不是合数. 如2. ...
- 如何通过三视图判断立方体个数_如何通过接触角判断疏水性?疏水性与亲水性的区别...
本期关注: 如何通过接触角判断疏水性?疏水性与亲水性的区别 一般涂层的疏水性主要是靠接触角和吸水率来判断的吧,想问下这两者之间的关系比如说系列样品中,接触角最大的吸水率一定最小吗? 下图是通过测试的亲 ...
最新文章
- 漫画 | 小公司卧薪尝胆三年,意外拿到美团offer
- Android多媒体分析-通过MediaStore获取Audio信息
- WCF布署问题 :HTTP 错误 404.17 - Not Found 请求的内容似乎是脚本,因而将无法由静态文件处理程序来处理。...
- A Complete Tutorial on Tree Based Modeling from Scratch (in R Python)
- 信息系统项目管理师:第5章:项目范围管理- 章节真题+解析
- SAP UI5 responsiveLayout和responsiveGridLayout的区别
- 疯子的算法总结(六) 简单排序总 选择排序+插入排序+比较排序+冒泡排序
- halcon reduce_ocr_class_svm 缩减基于SVM的OCR分类器。
- node.js 中间件_Node.js中的Passport中间件(模块)
- cachestat、cachetop、pcstat-linux系统缓存命中率分析工具
- 解决在微信下载app需要点击右上角在浏览器中打开下载的问题
- [转] Web前端开发工程师常用技术网站整理
- PPT中插入Flash
- HDMI设计9--Video Mixer IP
- PuTTY 提示error错误 no supported authentication methods available (server sent: publickey)
- ブランドは、同社とその製品、サービス
- 全面的平板--Surface(各版本对比)
- python京东抢购软件_[Python] 京东秒杀商品抢购-茅台抢购自动获取抢购时间【修改】...
- VR虚拟现实技术类毕业论文文献都有哪些?
- 手把手带你写一个中断输入设备驱动~